内包表記

Scalaは,1つ以上のジェネレータ(一般に,2つ以上の<-記号)を使ったfor内包表記を表現する事ができます。この場合,利用可能な2つの方法があります。

// 誤り!
for (x <- board.rows; y <- board.files)
  yield (x, y)

// 正しい!
for {
  x <- board.rows
  y <- board.files
} yield (x, y)

後者のスタイルはより冗長ですが,一般には読みやすく,より「スケーラブル」である(内包が複雑になってわかりにくくなる事が無い,という意味で)と言えます。2つ以上のジェネレータを含むfor内包表記は,全てこのフォームで書くべきです。ジェネレータを1つだけ持つ内包表記(e.g. for(i <- 0 to 10) yield i)は,最初のフォーム(波括弧ではなく括弧)を用いるべきです。

このルールに対する例外は,yield節の無いfor内包表記です。この場合,

// 誤り!
for {
  x <- board.rows
  y <- board.files
} {
  printf("(%d, %d)", x, y)
}

// 正しい!
for (x <- board.rows; y <- board.files) {
  printf("(%d, %d)", x, y)
}

結果として,for内包表記はその可読性の高さ(これはfor内包表記を拡張した理由の1つです)からmapflatMap,そしてfilterの連鎖呼び出しよりも好ましいと言えます。

前のトピックへ

波括弧

次のトピックへ

ささいな条件文

このページ

別のフォーマット

貢献