可変長引数の関数

可変長引数の関数 #

関数やメソッドを定義するとき、引数の数は事前に定義する必要があり、指定された数以外の数を入力することは普通はできない。

しかし、可変長引数を使うことで、関数やメソッドを任意の個数の引数で利用することができる。

その方法を以下に示す。

Javaではメソッドに可変長引数を設定できる仕様がある。

その仕様は以下の通り。

  • 引数のデータ型の後に「…」と記述する
  • 引数の中で、可変長引数は一番最後に書く
  • 可変長引数は1種類しか利用できない
  • 可変長引数の値は配列としてメソッドに渡される。

使用例は以下の通り。

class Main{
    public static String calendar(String... s){
        String d = s[0]+"/"+s[1]+"/"+s[2];
        return d;
    }

    public static void main(String args[]){
        Main m = new Main();
        System.out.println(m.calendar("2020","7","19"));
    }
}

実行結果

$ javac Main.java 
$ java Main
2020/7/19

Pythonでは関数を定義するときに引数の頭に*を付けたリストのアンパック型にすると、その部分に入力された値はその引数(タプル)の要素として扱われることになる。アンパック型なので、引数はいくらでも入れられることになり、結果これで可変長引数が実現できることになる。

実装例

def variable_args(*args,sep="/"):
    print(args)
    print(sep.join(args))

実行結果

>>> variable_args('2020','7','18')
('2020', '7', '18')
2020/7/18
>>> 
>>> variable_args('2020','7')
('2020', '7')
2020/7
>>> 
>>> variable_args('2020')
('2020',)
2020
>>>