web-dev-qa-db-fra.com

Que fait l'opérateur flèche ("->") dans Kotlin?

Probablement une question un peu large, mais la documentation officielle ne mentionne même pas l'opérateur flèche (ou la construction du langage, je ne sais pas quelle phrase est la plus précise) en tant qu'entité indépendante.

L'utilisation la plus évidente est l'instruction conditionnelle when, où elle est utilisée pour affecter une expression à une condition spécifique:

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

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

Quelles sont les autres utilisations et que font-elles? Y a-t-il une signification générale de l'opérateur de flèche dans Kotlin?

30
Gergely Lukacsy

Le -> fait partie de la syntaxe de Kotlin (similaire à Java syntaxe des expressions lambda ) et peut être utilisée dans 3 contextes:

  • when expressions où il sépare la partie "correspondance/condition" du bloc "résultat/exécution"

     val greet = when(args[0]) {
       "Apple", "Orange" -> "fruit"
       is Number -> "How many?"
       else    -> "hi!"
     }
    
  • expressions lambda où il sépare les paramètres du corps de la fonction

      val lambda = { a:String -> "hi!" }
      items.filter { element -> element == "search"  }
    
  • types de fonctions où il sépare les types de paramètres du type de résultat, par exemple comparator

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

Les détails sur la grammaire Kotlin sont dans la documentation en particulier:

34
miensol

Le -> est un séparateur . C'est un symbole spécial utilisé pour séparer le code à des fins différentes. Il peut être utilisé pour:

  • Séparez les paramètres et le corps d'un expression lambda

    val sum = { x: Int, y: Int -> x + y }
    
  • Séparez les paramètres et retournez la déclaration de type dans un type de fonction

    (R, T) -> R
    
  • Séparez la condition et le corps d'une branche quand expression

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

Le voici dans la documentation .

2
donturner