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

こんにちは!ぐちです。

久しぶりの本シリーズですが、今回はメソッド呼び出しの際の可変長引数についてご紹介したいと思います。Javaのコードと見比べてやってみましょう!

前回のVol.15はこちらからどうぞ。

可変長引数

メソッドのパラメータとして任意の個数でパラメターを渡す(受け取る)ことができるものです。例えば以下のような呼び出し方が可能となります。

hoge("a");
hoge("a", "b");

これらは引数の数に応じたメソッドがあるわけではなく、引数の個数を可変とすることで実現されています。

では、実際にJavaとScalaそれぞれでコードを見てみましょう!

Java

1つ以上の文字列を受け取り、,(カンマ)で結合して返すhoe()メソッドを定義しています。引数部分に注目頂きたいのですが、Javaでは可変引数を宣言するには...(ドット3つ)をデータ型の直後に書きます。受け取ったパラメータ(ここではs)は配列として扱うことが可能です。

public class Main {
    public static void main(String[] args) {
        A a = new A();
        String ret = a.hoge("a");
        System.out.println(ret);
        ret = a.hoge("a", "b", "c");
        System.out.println(ret);
    }
}

class A {
    public String hoge(String... s) {
        return String.join(",", s);
    }
}

実行結果は下記の通りです。

$ a
$ a,b,c

Scala

続きまして、Scalaです。Scalaでは可変長引数を宣言するには*(アスタリスク)をデータ型の直後に書きます。

object Main {
    def main(args: Array[String]): Unit = {
        val a = new A
        var ret = a.hoge("a")
        println(ret)
        ret = a.hoge("a", "b", "c")
        println(ret)
    }
}
class A {
    def hoge(s: String*): String = {
        return s.mkString(",")
    }
}

実行結果はJavaと同じく下記の通りです。

$ a
$ a,b,c

少しずつ書き方は違いますが、しっかりと違いをおさえて学んでいきましょう!

では今回はこの辺で。