What does the arrow (“->”) operator do in Kotlin?

2019-03-22 22:58发布

问题:

Probably a little bit broad question, but the official documentation doesn't even mentioning the arrow operator (or language construct, I don't know which phrase is more accurate) as an independent entity.

The most obvious use is the when conditional statement, where it is used to assign an expression to a specific condition:

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

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

What are the other uses, and what are they do? Is there a general meaning of the arrow operator in Kotlin?

回答1:

The -> is part of Kotlin's syntax (similar to Java's lambda expressions syntax) and can be used in 3 contexts:

  • when expressions where it separates "matching/condition" part from "result/execution" block

     val greet = when(args[0]) {
       "Apple", "Orange" -> "fruit"
       is Number -> "How many?"
       else    -> "hi!"
     }
    
  • lambda expressions where it separates parameters from function body

      val lambda = { a:String -> "hi!" }
      items.filter { element -> element == "search"  }
    
  • function types where it separates parameters types from result type e.g. comparator

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

Details about Kotlin grammar are in the documentation in particular:

  • functionType
  • functionLiteral
  • whenEntry