Подтвердить что ты не робот

Что делает оператор стрелки ( "->" ) в Котлине?

Вероятно, немного широк вопрос, но в официальной документации даже не упоминается оператор стрелки (или языковая конструкция, я не знаю, какая фраза является более точной) как независимый объект.

Наиболее очевидным применением является условный оператор when, который используется для назначения выражения для определенного условия:

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

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

Каковы другие виды использования и что они делают? Существует ли общий смысл оператора стрелки в Котлин?

4b9b3361

Ответ 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")
    }  
    

Вот это в документации.