web-dev-qa-db-ja.com

Kotlinの矢印( "->")演算子は何をしますか?

おそらく少し広い質問ですが、公式ドキュメントでは、矢印演算子(または言語構成、どのフレーズがより正確かはわかりません)を独立したエンティティとして言及していません。

最も明らかな使用法は、特定の条件に式を割り当てるために使用されるwhen条件ステートメントです。

  val greet = when(args[0]) {
    "Appul" -> "howdy!"
    "Orang" -> "wazzup?"
    "Banan" -> "bonjur!"
    else    -> "hi!"
  }

  println(args[0] +" greets you: \""+ greet +"\"")

他の用途とは何ですか? Kotlinの矢印演算子の一般的な意味はありますか?

30
Gergely Lukacsy

->はKotlinの構文の一部で(Javaの lambda式の構文 と同様)、3つのコンテキストで使用できます。

  • 「結果/実行」ブロックから「一致/条件」部分を分離するwhen

     val greet = when(args[0]) {
       "Apple", "Orange" -> "fruit"
       is Number -> "How many?"
       else    -> "hi!"
     }
    
  • 関数本体からパラメーターを分離するラムダ式

      val lambda = { a:String -> "hi!" }
      items.filter { element -> element == "search"  }
    
  • 結果タイプからパラメータタイプを分離する関数タイプcomparator

      fun <T> sort(comparator:(T,T) -> Int){
      }
    

Kotlin文法の詳細は、 ドキュメント内 特にです:

34
miensol

->separatorです。これは、異なる目的でコードを分離するために使用される特別なシンボルです。次の用途に使用できます。

  • lambda expression のパラメーターと本文を分離します

    val sum = { x: Int, y: Int -> x + y }
    
  • パラメーターを分離し、型宣言を 関数型 で区切ります

    (R, T) -> R
    
  • when expression ブランチの条件と本文を分離します

    when (x) {
        0, 1 -> print("x == 0 or x == 1")
        else -> print("otherwise")
    }  
    

これは documentation にあります。

2
donturner