CHAPTER 6 · 5 LESSONS · 65 問
配列をあつかう道具
配列を1件ずつ処理する、探す、絞る、作りかえる。くり返しを短く正確に書けるようになる。
配列を扱うとき、これまでは for を書いてきた。番号を0から始めて、length まで1ずつ増やして、array[i] で取り出す。動くけれど、毎回同じ骨組みを書くことになるし、書きまちがえやすい。< を <= にしただけで、存在しない要素を取りに行ってしまう。
この章で覚えるのは、その定型を肩代わりしてくれる道具だよ。「配列に対してやりたいこと」は実のところ数種類しかない、という発見でもある。
- 全部に同じことをする — 1件ずつ順に処理する
- 条件に合うものだけ残す — 絞り込む
- 中身を作りかえて新しい配列にする — 変換する
- 条件に合う最初の1件を探す — 検索する
やりたいことがこのどれかなら、対応する道具を使えば1行で書ける。番号の管理から解放されるので、やりたいことがそのままコードに出る。for で10行書いていたものが1行になり、しかも読んだ瞬間に意図が分かる、ということが起きるよ。
ここで覚えておきたい区別が、元の配列を変えるか、新しい配列を作るかだ。絞り込みや変換の道具は、元の配列はそのままにして新しい配列を返す。元のデータが勝手に書きかわらないので、後から「元はどうだったっけ」と困らずに済む。データを直接書きかえない書き方は、バグを減らすうえでとても効いてくる。
これらの道具は、渡し方が少し変わっている。処理そのものを引数として渡すのだ。「この配列の各要素に、この処理をあててほしい」という形で書く。はじめて見ると面食らうかもしれない。その正体は次の章で扱うので、ここでは「そういう書き方をするものだ」と受け入れて、まず使えるようになろう。
道具どうしはつなげて使えるのも強みだよ。「条件で絞ってから、中身を作りかえて、順に表示する」を、ひと続きに書ける。処理の流れが上から下へ素直に並ぶので、読む人は左から右へ目で追うだけで何をしているか分かる。for の中に if を入れて、その中でさらに何かをして…という入れ子と比べると、見通しの差は大きい。
つまずきやすいところも挙げておこう。変換する道具は必ず新しい配列を返すので、受け取る変数を用意しないと結果がどこにも残らない。「動いているのに何も出ない」というときは、返ってきた値を捨てていないか確かめてみよう。
もうひとつ、1件ずつ処理するだけの道具は値を返さない。これも取りちがえやすい。表示するだけならそれでいいけれど、結果を集めたいなら変換の道具を使う。「やりたいのは表示か、それとも新しい配列か」を先に決めるのがコツだよ。
現場のコードでは、for よりこちらのほうがよく見かける。読めないと他人のコードが追えないし、書けるとコードが短く安全になる。ここは投資に見合う章だよ。
とはいえ for が悪いわけではない。途中で抜けたいときや、複雑な条件で回すときは for のほうが素直に書ける。道具が増えたのであって、前のものが要らなくなったのではないよ。
名前もそれぞれ意味を持っている。「対応づける」「ふるいにかける」「畳み込む」といった元の言葉を知っておくと、記憶に引っかかりやすくなるよ。
学ぶときのコツは、まず for で書いてから道具に置きかえてみることだ。同じ結果になることを確かめながら進めると、その道具が中で何をしているかが腑に落ちる。丸暗記ではなく、「これは要するに for のあの形だ」と分かった状態で使えるようになるよ。
この章のレッスン
配列のメソッド