Что делает оператор стрелки ( "->" ) в Котлине?
Вероятно, немного широк вопрос, но в официальной документации даже не упоминается оператор стрелки (или языковая конструкция, я не знаю, какая фраза является более точной) как независимый объект.
Наиболее очевидным применением является условный оператор when, который используется для назначения выражения для определенного условия:
val greet = when(args[0]) {
"Appul" -> "howdy!"
"Orang" -> "wazzup?"
"Banan" -> "bonjur!"
else -> "hi!"
}
println(args[0] +" greets you: \""+ greet +"\"")
Каковы другие виды использования и что они делают?
Существует ли общий смысл оператора стрелки в Котлин?
Ответы
Ответ 1
->
является частью синтаксиса Kotlin (аналогично Java синтаксису лямбда-выражений) и может использоваться в трех контекстах:
-
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){
}
Подробности о грамматике Котлина в документации в частности:
Ответ 2
->
является разделителем. Это специальный символ, используемый для разделения кода с различными целями. Может использоваться для:
-
Отдельные параметры и тело лямбда-выражения
val sum = { x: Int, y: Int -> x + y }
-
Разделяйте параметры и возвращайте объявление типа в типе функции
(R, T) -> R
-
Разделите условие и тело ветвления выражения when
when (x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
Вот это в документации.