Ricerca…


Osservazioni

In contrasto con l' switch di Java, l'istruzione when non ha un comportamento fall-through. Ciò significa che se un ramo è abbinato, il flusso di controllo ritorna dopo la sua esecuzione e non è richiesta alcuna istruzione break . Se si desidera combinare i parametri per più argomenti, è possibile scrivere più argomenti separati da virgole:

when (x) {
    "foo", "bar" -> println("either foo or bar")
    else -> println("didn't match anything")
}

If-statement standard

val str = "Hello!"
if (str.length == 0) {
    print("The string is empty!")
} else if (str.length > 5) {
    print("The string is short!")
} else {
    print("The string is long!")
}

Gli altri rami sono opzionali nelle normali dichiarazioni if.

If-statement come espressione

Le dichiarazioni if ​​possono essere espressioni:

val str = if (condition) "Condition met!" else "Condition not met!"

Notare che else branch non è opzionale se l'espressione if viene usata come espressione.

Questo può essere fatto anche con una variante a più righe con parentesi graffe e più istruzioni else if .

val str = if (condition1){
    "Condition1 met!" 
   } else if (condition2) {
    "Condition2 met!" 
   } else {
    "Conditions not met!"
   }

SUGGERIMENTO: Kotlin può dedurre il tipo di variabile per te, ma se vuoi essere sicuro del tipo basta annotarlo sulla variabile come: val str: String = questo imporrà il tipo e renderà più facile la lettura.

Quando-invece di catene if-else-if

L'istruzione when è un'alternativa a un'istruzione if con più rami if if:

when {
    str.length == 0 -> print("The string is empty!")
    str.length > 5  -> print("The string is short!")
    else            -> print("The string is long!")
}

Lo stesso codice scritto usando una catena if-else-if :

if (str.length == 0) {
    print("The string is empty!")
} else if (str.length > 5) {
    print("The string is short!")
} else {
    print("The string is long!")
}

Proprio come con l'if-statement, il else-branch è opzionale, e puoi aggiungere tutte le ramificazioni che desideri. Puoi anche avere rami multilinea:

when {
    condition -> {
        doSomething()
        doSomeMore()
    }
    else -> doSomethingElse()
}

Corrispondenza dell'argomento when-statement

Quando viene fornito un argomento, lo stato- when corrisponde all'argomento contro i rami in sequenza. La corrispondenza viene eseguita utilizzando l'operatore == che esegue controlli nulli e confronta gli operandi utilizzando la funzione equals . Il primo corrispondente verrà eseguito.

when (x) {
    "English" -> print("How are you?")
    "German" -> print("Wie geht es dir?")
    else -> print("I don't know that language yet :(")
}

L'istruzione when conosce anche alcune opzioni di corrispondenza più avanzate:

val names = listOf("John", "Sarah", "Tim", "Maggie")
when (x) {
    in names -> print("I know that name!")
    !in 1..10 -> print("Argument was not in the range from 1 to 10")
    is String -> print(x.length) // Due to smart casting, you can use String-functions here
}

Quando-affermazione come espressione

Come se, quando può essere usato anche come espressione:

val greeting = when (x) {
    "English" -> "How are you?"
    "German" -> "Wie geht es dir?"
    else -> "I don't know that language yet :("
}
print(greeting)

Per essere usato come espressione, la dichiarazione quando deve essere esaustiva, ovvero avere un altro ramo o coprire tutte le possibilità con i rami in un altro modo.

Quando-dichiarazione con enum

when può essere usato per abbinare i valori enum :

enum class Day {
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
}

fun doOnDay(day: Day) {
    when(day) {
        Day.Sunday ->     // Do something
        Day.Monday, Day.Tuesday ->     // Do other thing
        Day.Wednesday ->  // ...
        Day.Thursday ->   // ...
        Day.Friday ->     // ...
        Day.Saturday ->   // ...
    }
}

Come puoi vedere nella seconda linea ( Monday e Tuedsay ) è anche possibile combinare due o più valori enum .

Se i tuoi casi non sono esaustivi, la compilazione mostrerà un errore. Puoi utilizzare else per gestire i casi predefiniti:

fun doOnDay(day: Day) {
    when(day) {
        Day.Monday ->     // Work
        Day.Tuesday ->    // Work hard
        Day.Wednesday ->  // ...
        Day.Thursday ->   //
        Day.Friday ->     //
        else ->           // Party on weekend
    }
} 

Anche se lo stesso può essere fatto usando il costrutto if-then-else , when prende cura dei valori di enum mancanti e lo rende più naturale.

Controlla qui per ulteriori informazioni su kotlin enum



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow