日経ソフトウエア8月号
前回の入門記事から3ヶ月。 今度は脱初心者ということで、「データ構造」と「分岐・境界条件」の記事を書かせていただいた。 最近はコードに触れることが多かったので、その中で感じたことを分かりやすくまとめてみた。
データ構造: リストとマップ
最近の言語では標準で用意されているリストとマップ(ハッシュ)の話。 と言っても、ただ使い方を説明しておしまい、にはしたくなかった。
Java のコレクションフレームワークには、いくつかのデータ構造のインタフェースと実装が用意されている。 これを使えばインタフェースを知っていれば、(実装を知らなくても)簡単なプログラムを書けちゃう。 だから、ついつい中身を知らなくても使い方が分かればいいや〜と思ってしまう(というか、思ってました><)。 この感覚は、ググって見つけたページを深く考えずに正しいと思っちゃう感覚に似ているかも。
でも、それじゃいつか困るし、面白くない。 なので、簡単なアドレス帳アプリケーションの作成を例にして、それぞれのデータ構造における実装の違いをなるべく分かりやすく説明するようにした。
- ArrayList と LinkedList はどっちを使えばいいの? HashMap と TreeMap の違いは?
- リストの要素をループするときには、 for 文 + get(i) とイテレータ(もしくは拡張for文)のどっちを使えばいいの?
こういうことが気になった人に、読んでもらえると嬉しいな。
分岐・境界条件: 読みやすいプログラムを書く
データ構造といえばアルゴリズムだけど、ここではもう少し基本的な if 文について書いた。 こちらもただ解説するだけじゃ退屈なので、初心者が書きがちなコード(不用意にネストしていたり境界条件にバグがあったり)を出発点として、少しずつコードを改良していくような説明にした。 明示的に言葉として書いてはいないけど、一種のリファクタリングみたいなもの。 本当は最初にテストコードを書いてから、少しずつ修正していくのがいいんだけどね。
記事では、いきなりバグを直さずに、読みづらいコードを読みやすくすることを優先した。 コードを読みやすくする作業を通じて、読みやすい(可読性の高い)コードの方がバグを見つけやすいことを実感してもらえるといいな。 「動くからいいじゃん」、じゃなくてね。
他の方の特集
正規表現はかなり忘れかけていたので、ちょうど覚え直すのにいい機会だった。