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 Typ val 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



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow