Kotlin
Bedingte Anweisungen
Suche…
Bemerkungen
Im Gegensatz zu Javas switch hat die when -Anweisung kein Durchfallverhalten. Das heißt, wenn ein Zweig übereinstimmt, kehrt der Kontrollfluss nach seiner Ausführung zurück und es ist keine break Anweisung erforderlich. Wenn Sie die bahaviors für mehrere Argumente kombinieren möchten, können Sie mehrere durch Kommas getrennte Argumente schreiben:
when (x) {
"foo", "bar" -> println("either foo or bar")
else -> println("didn't match anything")
}
Standard-if-Anweisung
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!")
}
Die else-Zweige sind in normalen if-Anweisungen optional.
If-Anweisung als Ausdruck
If-Anweisungen können Ausdrücke sein:
val str = if (condition) "Condition met!" else "Condition not met!"
Beachten Sie, dass die else -branch nicht optional ist, wenn die if -statement als Ausdruck verwendet wird.
Dies kann auch mit einer mehrzeiligen Variante mit geschweiften Klammern und mehreren else if Anweisungen geschehen.
val str = if (condition1){
"Condition1 met!"
} else if (condition2) {
"Condition2 met!"
} else {
"Conditions not met!"
}
TIPP: Kotlin kann den Typ der Variablen für Sie ableiten. Wenn Sie jedoch sichergehen möchten, dass der Typ sicher ist, kommentieren Sie ihn wie folgt für die Variable:
val str: String =wird der Typval str: String =und das Lesen wird einfacher.
Wenn-Anweisung anstelle von if-else-if-Ketten
Die when-Anweisung ist eine Alternative zu einer if-Anweisung mit mehreren else-if-Zweigen:
when {
str.length == 0 -> print("The string is empty!")
str.length > 5 -> print("The string is short!")
else -> print("The string is long!")
}
Gleicher Code, der mit einer if-else-if- Kette geschrieben wurde:
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!")
}
Genau wie bei der if-Anweisung ist der else-Zweig optional, und Sie können beliebig viele oder wenige Zweige hinzufügen. Sie können auch mehrzeilige Zweige haben:
when {
condition -> {
doSomething()
doSomeMore()
}
else -> doSomethingElse()
}
Wenn-Anweisungsargument übereinstimmt
Bei Angabe eines Arguments stimmt die when -Anweisung mit dem Argument gegen die Zweige in der Reihenfolge überein. Der Abgleich erfolgt mit dem Operator == , der Nullprüfungen durchführt und die Operanden mit der Funktion equals vergleicht. Der erste passende wird ausgeführt.
when (x) {
"English" -> print("How are you?")
"German" -> print("Wie geht es dir?")
else -> print("I don't know that language yet :(")
}
Die when-Anweisung kennt auch einige erweiterte Übereinstimmungsoptionen:
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
}
Wann-Anweisung als Ausdruck
Wie wenn, wenn kann auch als Ausdruck verwendet werden:
val greeting = when (x) {
"English" -> "How are you?"
"German" -> "Wie geht es dir?"
else -> "I don't know that language yet :("
}
print(greeting)
Um als Ausdruck verwendet zu werden, muss die when-Anweisung erschöpfend sein, dh entweder einen anderen Zweig haben oder alle Möglichkeiten mit den Zweigen auf andere Weise abdecken.
Wann-Statement mit Aufzählungszeichen
when kann verwendet werden, um enum Werte 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 -> // ...
}
}
Wie Sie in der zweiten Tuedsay ( Monday und Tuedsay ) sehen können, können Sie auch zwei oder mehrere enum kombinieren.
Wenn Ihre Fälle nicht vollständig sind, zeigt das Kompilieren einen Fehler an. Sie können else , um Standardfälle zu behandeln:
fun doOnDay(day: Day) {
when(day) {
Day.Monday -> // Work
Day.Tuesday -> // Work hard
Day.Wednesday -> // ...
Day.Thursday -> //
Day.Friday -> //
else -> // Party on weekend
}
}
Dasselbe kann mit dem if-then-else Konstrukt durchgeführt werden, when sich um fehlende enum kümmert und diese natürlicher macht.
Schauen Sie hier für weitere Informationen über Kotlin enum