Kotlin
Instrukcje warunkowe
Szukaj…
Uwagi
W przeciwieństwie do switch
Java, instrukcja when
nie ma zachowania awaryjnego. Oznacza to, że jeśli gałąź jest dopasowana, przepływ sterowania powraca po jego wykonaniu i nie jest wymagana instrukcja break
. Jeśli chcesz połączyć bahaviors dla wielu argumentów, możesz napisać wiele argumentów oddzielonych przecinkami:
when (x) {
"foo", "bar" -> println("either foo or bar")
else -> println("didn't match anything")
}
Standardowa instrukcja if
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!")
}
Pozostałe gałęzie są opcjonalne w normalnych instrukcjach if.
Instrukcja if jako wyrażenie
Instrukcje-if mogą być wyrażeniami:
val str = if (condition) "Condition met!" else "Condition not met!"
Zauważ, że else
-branch nie jest opcjonalny, if
-statement jest użyte jako wyrażenie.
Można to również zrobić w wariancie wieloliniowym z nawiasami klamrowymi i wieloma else if
instrukcjami else if
.
val str = if (condition1){
"Condition1 met!"
} else if (condition2) {
"Condition2 met!"
} else {
"Conditions not met!"
}
WSKAZÓWKA: Kotlin może wywnioskować dla ciebie typ zmiennej, ale jeśli chcesz być pewien, wpisz po prostu adnotację na zmiennej, np .:
val str: String =
to wymusi typ i ułatwi czytanie.
Instrukcja when zamiast łańcuchów if-else-if
Instrukcja when jest alternatywą dla instrukcji if z wieloma gałęziami else-if-:
when {
str.length == 0 -> print("The string is empty!")
str.length > 5 -> print("The string is short!")
else -> print("The string is long!")
}
Ten sam kod napisany przy użyciu łańcucha 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!")
}
Podobnie jak w przypadku instrukcji if, gałąź else jest opcjonalna i możesz dodać dowolną liczbę gałęzi. Możesz także mieć oddziały wielowierszowe:
when {
condition -> {
doSomething()
doSomeMore()
}
else -> doSomethingElse()
}
Dopasowanie argumentu kiedy-instrukcja
Po podaniu argumentu, when
-statement dopasowuje argument przeciwko gałęziom w sekwencji. Dopasowanie odbywa się za pomocą operatora ==
, który wykonuje kontrole zerowe i porównuje operandy za pomocą funkcji equals
. Pierwszy pasujący zostanie wykonany.
when (x) {
"English" -> print("How are you?")
"German" -> print("Wie geht es dir?")
else -> print("I don't know that language yet :(")
}
Instrukcja when zna również bardziej zaawansowane opcje dopasowywania:
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
}
Instrukcja-wyrażenie jako wyrażenie
Na przykład jeśli, kiedy może być również użyte jako wyrażenie:
val greeting = when (x) {
"English" -> "How are you?"
"German" -> "Wie geht es dir?"
else -> "I don't know that language yet :("
}
print(greeting)
Aby zostać użyte jako wyrażenie, instrukcja when musi być wyczerpująca, tj. Albo mieć gałąź else, albo obejmować wszystkie możliwości gałęziami w inny sposób.
Oświadczenie z wyliczeniami
when
można użyć do dopasowania wartości 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 -> // ...
}
}
Jak widać w wierszu drugiego przypadku ( Monday
i Tuedsay
), możliwe jest również połączenie dwóch lub więcej wartości enum
.
Jeśli twoje przypadki nie są wyczerpujące, kompilacja wyświetli błąd. Możesz użyć else
do obsługi domyślnych przypadków:
fun doOnDay(day: Day) {
when(day) {
Day.Monday -> // Work
Day.Tuesday -> // Work hard
Day.Wednesday -> // ...
Day.Thursday -> //
Day.Friday -> //
else -> // Party on weekend
}
}
Chociaż to samo można zrobić za pomocą konstrukcji „ if-then-else
, when
zajmuje się brakującymi wartościami enum
i czyni je bardziej naturalnym.
Sprawdź tutaj, aby uzyskać więcej informacji na temat kotlin enum