こんにちは!ぐちです。
構文シリーズ第三?弾!前回のwhile式
に引き続き、もうひとつの繰り返し処理のfor式
です。Javaではfor文
といいますが、Scalaではfor式
と呼ぶようですね。
前回のVol.11はこちらからどうぞ。
for式
「Scalaのfor式
は反復処理のスイスアーミーナイフである」という一文が参考図書に書かれていますが、本当に便利な機能が詰め合わされていると思います。例によって例のごとくJavaとの違いをコードをベースに追ってみましょう。コレクションに対する反復処理を例に挙げますね。
Java
配列に対して拡張for文を使って、ファイル名を表示します。よく見慣れたコードですね。
import java.io.File; public class Main { public static void main(String[] args) { File[] files = (new File(".")).listFiles(); for(File f : files) { System.out.println(f); } } }
int
変数のカウンタを用いて要素数を指定しても同じ処理が行えますよね。一応下記にコードを載せておきます。
import java.io.File; public class Main { public static void main(String[] args) { File[] files = (new File(".")).listFiles(); for(int i = 0; i < files.length; i++) { System.out.println(files[i]); } } }
Scala
続きまして、Scalaで同様のコードを見てみましょう!
object Main { def main(args: Array[String]): Unit = { val files = (new java.io.File(".")).listFiles() for(f <- files) println(f) } }
Javaの拡張for文とほぼ同じですね。このあたりはJavaを書いてきた人であれば理解しやすいですね!
Scalaでは一般的ではないようですが、カウンタを用いた反復処理も可能とのことです。
object Main { def main(args: Array[String]): Unit = { val files = (new java.io.File(".")).listFiles() for(i <- 0 to files.length - 1) println(files(i)) } }
ループの繰り返し条件部分にあるto
はRange型
と呼ばれるScalaのデータ型だそうです。反復処理の上限値を含めない場合にはuntil
というのもあるので、さきほどのコードを下記のように書くこともできます。
for(i <- 0 until files.length) println(files(i))
少しずつ違いはあるものの、まぁまだついていけますよね?!笑
では今回はこの辺で。