Co robi operator strzałki ( "- > " ) w Kotlinie?

Prawdopodobnie trochę szersze pytanie, ale oficjalna dokumentacja nie wspomina nawet o operatorze strzałki (lub konstrukcji językowej, Nie wiem, która fraza jest dokładniejsza) jako niezależnej jednostce.

Najbardziej oczywistym zastosowaniem jest instrukcja warunkowa when, gdzie służy do przypisania wyrażenia do określonego warunku:

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

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

Jakie są inne zastosowania i do czego służą? Czy istnieje ogólne znaczenie operatora strzałki w Kotlinie?

Author: Gergely Lukacsy, 2017-03-07

3 answers

-> jest częścią składni Kotlina (podobnie jak składnia wyrażeń lambda Javy ) i może być używana w 3 kontekstach:

  • when wyrażenia, w których oddziela część "matching / condition "od bloku" result / execution"

     val greet = when(args[0]) {
       "Apple", "Orange" -> "fruit"
       is Number -> "How many?"
       else    -> "hi!"
     }
    
  • Wyrażenia Lambda, gdzie oddziela parametry od ciała funkcji

      val lambda = { a:String -> "hi!" }
      items.filter { element -> element == "search"  }
    
  • Typy funkcji, gdzie oddziela typy parametrów od typu wynikowego, np. comparator

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

Szczegóły o gramatyce Kotlina są w dokumentacji w szczególności:

 46
Author: miensol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-07 14:17:22

-> jest separatorem . Jest to specjalny symbol używany do oddzielania kodu o różnych celach. Może być używany do:

  • Oddziel parametry i ciało wyrażenia lambda

    val sum = { x: Int, y: Int -> x + y }
    
  • Oddzielenie parametrów i deklaracji typu zwracanego w typu funkcji

    (R, T) -> R
    
  • Oddziel warunek i ciało gdy wyrażenie oddział

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

Tutaj jest w dokumentacja .

 8
Author: donturner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-05 12:13:23

From the Kotlin docs :

->

  • Oddziela parametry i ciało wyrażenia lambda

  • Oddziela parametry i deklarację typu return w funkcji typ

  • Oddziela warunek i ciało gdy wyrażenie Oddział

 2
Author: smo0f,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-18 18:03:49