Kotlin Bedingte Steuerung

IF-Ausdruck

Eine if-Anweisung enthält einen booleschen Ausdruck und eine oder mehrere Anweisungen.

// 传统用法
var max = a 
if (a < b) max = b

// 使用 else 
var max: Int
if (a > b) {
    max = a
} else {
    max = b
}
 
// 作为表达式
val max = if (a > b) a else b

Wir können das Ergebnis eines IF-Ausdrucks auch einer Variablen zuweisen.

val max = if (a > b) {
    print("Choose a")
    a
} else {
    print("Choose b")
    b
}

Dies zeigt auch, dass wir keinen ternären Operator wie Java benötigen, weil wir ihn damit einfach implementieren können:

val c = if (condition) a else b

Beispiele

fun main(args: Array<String>) {
    var x = 0
    if(x>0){
        println("x 大于 0")
    }else if(x==0){
        println("x 等于 0")
    }else{
        println("x 小于 0")
    }

    var a = 1
    var b = 2
    val c = if (a>=b) a else b
    println("c 的值为 $c")
}

Die Ausgabe ist:

x 等于 0
c 的值为 2

Verwendung von Bereichen

Verwenden Sie den in-Operator, um zu prüfen, ob eine Zahl innerhalb eines angegebenen Bereichs liegt. Das Bereichsformat ist:x..y :

Beispiele

fun main(args: Array<String>) {
    val x = 5
    val y = 9
    if (x in 1..8) {
        println("x 在区间内")
    }
}

Die Ausgabe ist:

x 在区间内

when-Ausdruck

when vergleicht sein Argument der Reihe nach mit allen Zweigbedingungen, bis ein Zweig die Bedingung erfüllt.

when kann entweder als Ausdruck oder als Anweisung verwendet werden. Wenn es als Ausdruck verwendet wird, ist der Wert des passenden Zweigs der Wert des gesamten Ausdrucks. Wenn es als Anweisung verwendet wird, werden die Werte der einzelnen Zweige ignoriert.

when ähnelt dem switch-Operator in anderen Sprachen. Seine einfachste Form ist wie folgt:

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // 注意这个块
        print("x 不是 1 ,也不是 2")
    }
}

In when ist else dasselbe wie default in switch. Wenn keiner der anderen Zweige die Bedingung erfüllt, wird der else-Zweig ausgewertet.

Wenn viele Zweige auf dieselbe Weise behandelt werden müssen, können Sie mehrere Zweigbedingungen zusammenfassen, getrennt durch Kommas:

when (x) {
    0, 1 -> print("x == 0 or x == 1")
    else -> print("otherwise")
}

Wir können auch prüfen, ob ein Wert in (in) oder nicht in (!in) einem Bereich oder einer Sammlung enthalten ist:

when (x) {
    in 1..10 -> print("x is in the range")
    in validNumbers -> print("x is valid")
    !in 10..20 -> print("x is outside the range")
    else -> print("none of the above")
}

Eine weitere Möglichkeit ist zu prüfen, ob ein Wert (is) oder nicht (!is) ein Wert eines bestimmten Typs ist. Hinweis: Dank Smart Casts können Sie auf die Methoden und Eigenschaften dieses Typs ohne zusätzliche Prüfungen zugreifen.

fun hasPrefix(x: Any) = when(x) {
    is String -> x.startsWith("prefix")
    else -> false
}

when kann auch verwendet werden, um eine if-else-if-Kette zu ersetzen. Wenn kein Argument angegeben wird, sind alle Zweige einfache boolesche Ausdrücke, und ein Zweig wird ausgeführt, wenn seine Bedingung wahr ist:

when {
    x.isOdd() -> print("x is odd")
    x.isEven() -> print("x is even")
    else -> print("x is funny")
}

Beispiele

fun main(args: Array<String>) {
    var x = 0
    when (x) {
        0, 1 -> println("x == 0 or x == 1")
        else -> println("otherwise")
    }

    when (x) {
        1 -> println("x == 1")
        2 -> println("x == 2")
        else -> { // 注意这个块
            println("x 不是 1 ,也不是 2")
        }
    }

    when (x) {
        in 0..10 -> println("x 在该区间范围内")
        else -> println("x 不在该区间范围内")
    }
}

Ausgabe:

x == 0 or x == 1
x 不是 1 ,也不是 2
x 在该区间范围内

Verwenden von in in whenin-Operator, um zu prüfen, ob eine Sammlung eine Instanz enthält:

fun main(args: Array<String>) {
    val items = setOf("apple", "banana", "kiwi")
    when {
        "orange" in items -> println("juicy")
        "apple" in items -> println("apple is fine too")
    }
}

Ausgabe:

apple is fine too
Andere Erweiterungen