Kotlin学習シリーズの:可変パラメータ


Kotlinの可変パラメータ
  • Javaでの可変パラメータの使用をレビューする:
    public class VarArgsTest {
    
        public static void main(String[] args) {
    
            Test test = new Test();
            //      
            System.out.println(test.sum(1, 2, 3, 4, 5));
    
            int[] arrays = {1, 2, 3, 4, 5};
            //      
            System.out.println(test.sum(arrays));
        }
    }
    
    class Test {
    
        public int sum(int... args) {
    
            int sum = 0;
    
            for (int arg : args) {
                sum += arg;
            }
    
            return sum;
        }
    
    }
    注意点:
  • 可変パラメータは本質的に配列であり、ある方法で可変パラメータを宣言すると、任意の離散パラメータ値を伝達することも、配列を伝達することもできる.
  • 可変パラメータは、方法の最後のパラメータである必要がある
  • Kotlinでは、構文フォーマットが異なり、可変パラメータを表す独自のキーワードvarargがあり、構文形式は以下の通りです.
    fun test(vararg args: String) {
        args.forEach {
            println(it)
        }
    }
    呼び出し:
    fun main(args: Array) {
        test("a", "b", "c", "d")
    }
  • JavaとKotlinの可変パラメータの比較:
  • 第1条についてはargsをJAvaClassは印刷され、バイトコードレベルでは配列であることがわかりますが、可変パラメータを持つメソッドを呼び出すと、離散したパラメータ値しか伝達されず、配列を直接伝達すると構文エラーが報告されます.しかし、手元に配列がある場合、伝達するには演算子*(spread operator):配列を個々の個体に分散して
     val array = arrayOf("a", "b", "c", "d")
     test(*array)
  • に伝達することに相当する.
  • 第2条については、Kotlinでは適用されない:
    fun test(vararg args: String, param: String) {
        args.forEach {
              println(it)
        }
    
        println(param)
    }
    しかし、この場合、伝達パラメータには、非可変パラメータについて、命名パラメータの形式を使用して呼び出す必要がある:
    test3(*array, param = "hello")