学んだことをなぐり書き


for

// 回数ループは主に Range クラスを使用する
println((0 to 3).getClass)

// to は 下限値 〜 上限値 までの Range クラスを作成する。
for(i <- 0 to 3) print(i + " ")
println

// 上限値を外したい場合は until を使う。
for(i <- 0 until 3) print(i + " ")
println

// 通常はステップ数は1だが変更したい場合は by を使用する。
for(i <- 0 to 10 by 3) print(i + " ")
println

// if を使うとフィルターをかけることができる
for(i <- 0 to 10 if i > 2 && i < 6) print(i + " ")
println

// セミコロンを付ければ if をどんどん追加することができる。
for(i <- 0 to 20
    if i > 5 && i < 15;
    if (i % 2) == 0) print(i + " ")
println

// 複数の <- を指定することができる。
// 括弧 ではなく 中括弧 を使うことも出来る。
// 中括弧 を使った場合一部の セミコロン を省略できる
def fileHere = (new java.io.File(".")).listFiles
def fileLines(file: java.io.File) =
  scala.io.Source.fromFile(file).getLines.toList
def grep(pattern: String) =
  for {
    file <- fileHere
    if file.getName.endsWith(".scala")
    line <- fileLines(file)
    // 変数を定義することも出来る。
    // 束縛変数といい val 扱いで for のスコープ内でのみ使用可能
    trimmed = line.trim
    if trimmed.matches(pattern)
  } println(file + ": " + line.trim)
grep(".*to.*")

// for yield で新しいコレクションを作成することができる。
def numbers =
  for (i <- 0 to 3) yield i
// yield の後に作成したい要素を指定する。
numbers.foreach { i => print(i + " ") }
println
0 1 2 3 
0 1 2 
0 3 6 9 
3 4 5 
6 8 10 12 14 
./hoge.scala: println((0 to 3).getClass)
./hoge.scala: // 下限値 to 上限値 までの Range クラスを作成する。
./hoge.scala: for(i <- 0 to 3) print(i + " ")
./hoge.scala: for(i <- 0 to 10 by 3) print(i + " ")
./hoge.scala: for(i <- 0 to 10 if i > 2 && i < 6) print(i + " ")
./hoge.scala: for(i <- 0 to 20
./hoge.scala: scala.io.Source.fromFile(file).getLines.toList
./hoge.scala: grep(".*to.*")
0 1 2 3

メンバーのみ編集できます