1ヶ月でWebデザイン・プログラミングスキルをオーダーメイドのカリキュラムで学べるスクール、それがWebCamp。

子供の想像力を伸ばしアイデアを形にする小学生向けプログラミング教室「プロスタキッズ」

【Java入門】List でインデックスをつかったfor構文がNGな2つの理由

Pocket

Listで全件の中身を取り出すときによく使われるのがfor構文です。
for構文は、繰り返すときに最もよく使われる構文のうちの1つです。Javaの中でもこのfor構文は、結構序盤でできて、最後の最後までお世話になる文です。むしろ、この文なしでは、アプリケーションを作るのはまず不可能です。
そして、Listでよく使われるのは、一般的なこのfor文ではありません。

確かに、結果においては、リストの中の内容を全件抽出しているのですが、残念ながらこれでは正解とは言えないです。
実はfor構文には、拡張for構文というのがありまして、リストの内容を全件取り出すときは主にこちらのfor構文の方が効率がいいのです。
その理由も含めて説明するので、拡張for構文をしっかりと理解していきましょう。
その前にfor構文についてさらっとおさらいしておきましょう。

よく使われる2つのfor構文

インデックス指定のfor構文

インデックス指定と書きましたが、こちらのfor構文は一番最初に習うごくごく初歩的な構文でありながら、アプリケーションを作るときには必ず1行は含まれている構文です。
インデックスというのは、内容が含まれている場所のことを指します。
図のような配列があるとすれば、インデックスは下記のようになります。

拡張for構文

拡張for構文は、繰り返し文forの仲間であり、主にインデックスを持たないリスト等で使われてる構文です。
一般的なfor構文の方が我々人間からしたらわかりやすいのですが、こればかり使っていると後ほど説明しますが、とある問題にぶつかります。

拡張for構文は、一般的なfor構文と違い、;ではなく:を用います。
for(データ型:リスト名){//繰り返しする処理}といった具合に、前にはデータ型を後ろに配列名やリスト名を記します。

慣れないうちは、どちらが前だった混同しやすいので、後ろにリスト名と覚えておくと理解力がグッとあがります。
それではListでは何故拡張for構文の方が推奨されるのでしょうか?
それには大きく2つの理由があるからです。

Listでは何故拡張for構文が推奨なのか?

インデックスを使うfor構文は後々メンテナンスがしにくい

まずは、プログラムのメンテナンスがしにくいといった面があります。

一見すると見やすくていいソースを書いていると褒められそうですが、Listでfor構文で処理をしてしまうと、違う人が見ると、何だよこのソース!わかりにくいなといった風になります。

もし、あなたのソースが後々メンテナンスで変更されたとしましょう。
まだ3つや4つくらいのListなら相手もわかりやすいですが、これが1000個のリストだったとしましょう。この中からりんごとぶどうの間にみかんを入れたいとします。

すると、for構文では一番目から順番に見ていくので、りんごとぶどうが990個目あたりにあるとすると、目視で探すのも大変ですし、追加の処理を入れるまでに相手の時間をもロスしてしまう可能性があるからなんです。
これが拡張for構文だと探す手間が省け、追加も削除もやりやすくなるのです。

Listの種類によって、インデックスが使えないものもある

2つ目の理由がListの種類によっては一般的なインデックスを使ったfor構文が使えないものもあります。
今は、リストにfor構文が使えないものがあるといった程度で覚えておくといいでしょう。
また機会があればそのときに詳しくお話します。
プログラムは超正直なので、できないものはできないのです。
もしfor構文しか知らない場合、ここでお手上げ状態になります。
追加?これどうやってるすの?とヘタをすれば1日中費やしてしまうことになってしまいます。

おわりに

いかがでしたでしょうか?
今回はListと(拡張)for構文についてお話しました。
はじめのうちは、この拡張for構文は大変ややこしいです。
私も、拡張for構文に慣れずによくエラーになっていたことは今でもいい思い出です。
この拡張for構文をしっかり理解すると、Listを含め様々な場面でソースの表現の幅がグッと広がっていきます。
もし、リストを作ってくださいと指示がくれば上記のようなソースを書けるようにしておきましょう。
そうすると、この人はちゃんとわかってるなと評価が上がるかもしれません。

投稿者:プロスタ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

プログラミングで挫折しそうなら、現役エンジニアにマンツーマンで相談してみませんか?オンラインのプログラミングスクール「TechAcademy」のメンターが対応。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

ページ上部へ戻る