拡張for文の書き方、for文との違い【ゼロから始めるJavaの基礎~番外編~】

今回は『拡張for文』についてご紹介をしていきます。
『for文』と『配列』についての知識がある方を想定した内容になっていますので、もしそちらの内容に不安があるという方は先に下記の記事を確認しておくのがおすすめです。

拡張for文とは?

そもそも『拡張for文』とはなんでしょう?
名前から『for文』の強化バージョンのような雰囲気は感じますよね(笑)

Javaの『拡張for文』は配列の要素を1つずつ取り出すための繰り返しを、従来のfor文よりもシンプルな記述で実現することが出来る特殊な記述方法です。

配列の値を『for文』で取り出す

『for文』と『拡張for文』を比較するために、まずは配列の値を『for文』で取り出す処理を見てみましょう。

【サンプル】

int[] scores = {600, 700, 750, 800, 850};

for(int i = 0; i < 5; i++) {
	System.out.println("得点は" + scores[i] + "です。");
}

【実行結果】

『for文』で配列の値を1つずつ取り出そうとするとこのようなコードになります。この書き方でも特に問題はありません。

ここで配列の要素数が分からない場合について考えてみましょう。
『for文』で配列の要素を1つずつ取り出すには、プログラマが配列の要素数を把握している必要がありますよね。
この数を把握していないと、要素をすべて取り出すには何回のループを作ればいいのかが判断できないため、『for文』の条件式を記述することが出来ません。(サンプルの3行目の『i < 5』の部分)

「配列の数を数えればいいじゃない!」という解決策もあるかもしれませんが、こんな配列だったらどうですか?
いちいち数えたくもないし、数え間違いによるミスが起こってしまうかもしれませんよね…。

int[] scores = {600, 700, 750, 800, 850, 
		600, 700, 750, 800, 850, 600,700, 750, 800, 850, 600, 750, 800, 850, 600};

こういった問題を『拡張for文』を使うことによって解消することが出来ます

拡張for文の構文

for (データ型 変数名 : 配列変数名) {
繰り返し行いたい処理
}

通常の『for文』と比べると少し項目数が少ないですね。
データ型には要素を取り出したい配列のデータ型と同じ型を記述します。

変数名は任意の変数名で構いませんが、配列変数名は『scores』のように複数形で記述されている場合が多いので、配列変数名を単数形に直したものを使用することが多いです。

配列変数名には、要素を取り出したい配列の変数を記述します。

区切りに使われているのは『;(セミコロン)』ではなく『:(コロン)』であることにも注意しましょう。

【サンプル】

int[] scores = {600, 700, 750, 800, 850, 
		600, 700, 750, 800, 850, 600,700};

for(int score : scores) {
	System.out.println("得点は" + score + "です。");
}

【実行結果】

イメージ的には、次のような流れで処理が行われると思ってください。

1、配列の先頭の要素が取り出され、変数に格納される
2、繰り返し行われる処理が実行される
3、次の要素が取り出され、変数に再代入される
4、繰り返し行われる処理が実行される

この流れが、配列の最後の要素まで順番に行われていきます。

拡張for文と多次元配列

最後に2次元配列をはじめとする多次元配列から『拡張for文』を使って要素を取り出す方法をご紹介します。
結論から言ってしまうと次元数に合わせて『拡張for文』ネストさせることで実現が出来ます。

多次元配列や、ネストというキーワードに不安を覚える方は、以下の記事でご紹介をしていますので良ければ参考にしてください。

【サンプル】

int[][] scores2D = {
		{600, 700, 750},
		{800, 850, 600},
		{700, 750, 800}
};

for(int scores[] : scores2D) {
	for(int score : scores) {
		System.out.println("得点は" + score + "です。");
	}
}

【実行結果】

サンプルのように、多次元配列から次元単位で一度取り出しを行い、その次の『拡張for文』で更にその中から要素を取り出すという流れで多次元配列からも要素を取り出すことが出来ます。

次元数に合わせてfor文の数も増やすことで更に深い次元数の配列にも対応することが可能です。

最後に

これで『拡張for文』のご紹介と使い方の説明は終わりです。
配列の要素数を気にすることなく、配列に対して繰り返しの処理を行うことが出来る便利な構文ですので覚えておきましょうね。

「番外編だし現場ではあんまり使われてないんでしょ?」と思った方もいるかもしれません(笑)
残念ながら『拡張for』文は現場でもバリバリ使われています。

『for文』と同様に『拡張for文』も使えるようになっておけるといいと思います。

最後までお読みいただきありがとうございました。