// 回数ループは主に 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
最新コメント