Kotlin
Dichiarazioni condizionali
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