Kengo's blog

Technical articles about original projects, JVM, Static Analysis and TypeScript.

Javaのforループ

仕事なのだから基本的なことを体系的に理解しないとまずい!という話になり、現在Javaについて基礎から勉強しなおしています。恥ずかしいことにこうした勉強をするまで、Errorクラスの存在を知りませんでした。何でもかんでも例外扱いなのではなかったのですね。一歩前進です。
で、forループについていろいろ面白いことが分かったので少しまとめておきます。

拡張forループ

俗に言うfor-eachですが、Javaでも利用できるようです。Rubyほど直感的で分かりやすい書き方とはいえませんが……。

int[] a = {1, 3, 5, 7};

// 普通のforループ
for (int i = 0; i < a.length; i++) {
	System.out.println(a[i]);
}

// 拡張forループ ソース・レベル5.0以上で使用可能
for(int j : a) {
	System.out.println(j);
}

なおRubyだとこんな感じ。

# 小さい順に表示したいのでソートする
for i in {1, 3, 5, 7}.sort do
  puts i
end

{1, 3, 5, 7}.sort.each do |i|
  puts i
end

ついでにHSP

a = 1, 3, 5, 7
foreach a
	mes a(cnt)
loop

ラベルつきforループ

これが必要になるケースをあまり想像できないのですが、ラベルを利用することで内側のループ内で外側のループに対してcontinueやbreakが可能になるようです。多次元配列を線形検索する際などに利用するのでしょうか。

// outerLoopというラベルをforループにつける
outerLoop: for (int o = 0; o < 10; o++) {
	System.out.print(o + ":");
	for (int i = 0; i < 10; i++) {
		if (o == i) {
			System.out.println();
			continue outerLoop;
		}
		System.out.print('*');
	}
	System.out.println("絶対に到達しないコード");
}