落書きノート

ふと自分が気になった事を書いてます

Scala for式

「Guide to Scala - Scalaプログラミング入門」を復習しています。まずはfor式から。

scala> val listItems = List("Scala","Java","Ruby")
listItems: List[String] = List(Scala, Java, Ruby)

scala> for(item <- listItems) println("item = " + item)
item = Scala
item = Java
item = Ruby

scala> for(
     | item <- listItems
     | if item.length > 4
     | ) println("item = " + item)
item = Scala

scala> val resultList = for(item <- listItems) yield "I use " + item
resultList: List[String] = List(I use Scala, I use Java, I use Ruby)

scala> resultList
res2: List[String] = List(I use Scala, I use Java, I use Ruby)

listItemsという文字列のリスト(コレクション)を作成します。それをfor式でそれぞれ処理していきます。listItemsの要素を1つずつ取り出し、それがitemに割り当てられます。そしてitem = …という形式で要素を出力しています。

for式の引数(expression)に、if文を指定すれば詳細な制御が出来るようになります。今回で言うitem <- listItemsのことをジェネレータ、if item.length > 4のことをフィルタと呼ばれています。これによって文字列の長さが4より大きければ、その文字列を出力するといった感じです。

resultListにfor式で加工した結果を保持しています。yieldを使用して新しいコレクションを作成しています。コレクションの各要素に対して文字列を付加し、その要素を持つ新しいリストを作成しています。こうすることで便利に処理が記述できますね。

Guide to ScalaーScalaプログラミング入門
中村 修太 (2013-03-02)
売り上げランキング: 3,191