What does the arrow ("->") operator do in Kotlin?
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?
Solution 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" blockval 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
Solution 2:
The ->
is a separator. It is special symbol used to separate code with different purposes. It can be used to:
-
Separate the parameters and body of a lambda expression
val sum = { x: Int, y: Int -> x + y }
-
Separate the parameters and return type declaration in a function type
(R, T) -> R
-
Separate the condition and body of a when expression branch
when (x) { 0, 1 -> print("x == 0 or x == 1") else -> print("otherwise") }
Here it is in the documentation.