for式


for式はJavaと同じように使用できますが、全く異なる式です、 forの式の構文は次の通りです

for(ジェネレータ1; ジェネレータ2; ...; ジェネレータn)

ジェネレータ1 = a1 < exp1; ジェネレータ2 = a2 < exp2; ...

expNは評価することで値となるものを指します。

for(x <- 1 to 5; y <- 1 until 5) {
  println("x = " + x + "y = " + y)
}
// 1 to 5は1〜5まで(5を含む)の範囲のことで
// 1 until 5は1〜5まで(5を含まない)の範囲です
// <-はJavaの拡張forと同じように<-の右辺にある値を1つずつ、<-の左辺に逐次代入する

// このfor式をJavaで記述するとこのようになります
// for(int x = 1; x <= 5; x++) {
//   for(int y = 1; y <= 4; y++) {
//     println("x = " + x + "y = " + y)
//   }
// }

for式にifを入れることもできます。

for(x <- 1 to 5; y <- 1 until 5; if x != y) {
  println("x = " + x + "y = " + y)
}
// このfor式はxとyが異なる値のときのみ抽出して表示します

for式はコレクション(ArrayやList、Map、Vectorなど)の要素を順番に辿って処理することができます。

for(l <- List("A", "B", "C", "D", "E") ) println(l)

さらにfor式はyieldを使うことで、辿った要素を加工して新しいコレクションを作成できます。

val strs = for(l <- List("A", "B", "C", "D", "E") ) yield {
  "Pre" + l
}
// この結果はPreA PreB PreC PreD PreEが出力されます。

yieldキーワードを使用したfor式を特別にfor-comprehensionと呼ぶことがあります。