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