1. ホーム
  2. syntax

[解決済み] Kotlinの変数名前アスタリスク演算子またはSpread演算子

2022-06-23 22:10:22

質問

Kotlinで変数名の前につけるアスタリスクの意味を知りたいです。 私はこれを見た ( *args ) の中で Spring bootのKotlinの例 :

@SpringBootApplication
open class Application {

    @Bean
    open fun init(repository: CustomerRepository) = CommandLineRunner {
        repository.save(Customer("Jack", "Bauer"))
        repository.save(Customer("Chloe", "O'Brian"))
        repository.save(Customer("Kim", "Bauer"))
        repository.save(Customer("David", "Palmer"))
        repository.save(Customer("Michelle", "Dessler"))
    }
}

fun main(args: Array<String>) {
    SpringApplication.run(Application::class.java, *args)
}

どのように解決するのですか?

この * 演算子として知られています。 スプレッド演算子 と呼ばれています。

からは Kotlinリファレンス ...

vararg-functionを呼び出すとき、asList(1, 2, 3)のように引数を1つずつ渡すこともできますし、すでに配列を持っていてその内容を関数に渡したい場合は、スプレッド演算子(配列に*を前置する)を使用します。

を受け付ける関数に渡す前に、配列に適用することができます。 varargs .

例として...

様々な数の引数を受け取る関数がある場合...

fun sumOfNumbers(vararg numbers: Int): Int {
    return numbers.sum()
}

配列の要素を引数として渡すには、spread演算子を使う。

val numbers = intArrayOf(2, 3, 4)
val sum = sumOfNumbers(*numbers)
println(sum) // Prints '9'


注意事項

  • * 演算子はまた 乗算演算子 (にもなります(当たり前ですが)。
  • 演算子は関数に引数を渡すときのみ使用できます。演算の結果は を格納することはできません。 というのも、この演算は値を生成しないからです(これは は純粋に 構文糖です)。
  • この演算子は、ポインタを参照解除しているように見えるので、最初はC/C++プログラマーを混乱させるかもしれません。そうではありません。Kotlinは ポインタの概念がありません。 .
  • 演算子は 他の引数との間で を使うことができます。これは例で示されている ここで .
  • この演算子は apply 関数に似ています。