【初心者向け】JavaとScalaを同時にマスターしよう!Vol. 12

こんにちは!ぐちです。

構文シリーズ第三?弾!前回の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))
    }
}

ループの繰り返し条件部分にあるtoRange型と呼ばれるScalaのデータ型だそうです。反復処理の上限値を含めない場合にはuntilというのもあるので、さきほどのコードを下記のように書くこともできます。

for(i <- 0 until files.length)
    println(files(i))

少しずつ違いはあるものの、まぁまだついていけますよね?!笑

では今回はこの辺で。