Contrôle conditionnel en Kotlin

Expression IF

Une instruction if contient une expression booléenne et une ou plusieurs instructions.

// 传统用法
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

Nous pouvons également affecter le résultat d'une expression IF à une variable.

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

Cela montre aussi que nous n'avons pas besoin d'un opérateur ternaire comme en Java, car nous pouvons l'utiliser pour l'implémenter simplement :

val c = if (condition) a else b

Exemples

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")
}

La sortie est :

x 等于 0
c 的值为 2

Utilisation des intervalles

Utilisez l'opérateur in pour vérifier si un nombre se trouve dans un intervalle spécifié. Le format d'intervalle est :x..y :

Exemples

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

La sortie est :

x 在区间内

Expression when

when compare son argument avec toutes les conditions de branche dans l'ordre jusqu'à ce qu'une branche satisfasse la condition.

when peut être utilisé soit comme expression, soit comme instruction. S'il est utilisé comme expression, la valeur de la branche correspondante est la valeur de toute l'expression. S'il est utilisé comme instruction, les valeurs des branches individuelles sont ignorées.

when est similaire à l'opérateur switch dans d'autres langages. Sa forme la plus simple est la suivante :

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

Dans when, else est identique à default dans switch. Si aucune des autres branches ne satisfait la condition, la branche else sera évaluée.

Si de nombreuses branches doivent être traitées de la même manière, vous pouvez regrouper plusieurs conditions de branche, séparées par des virgules :

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

Nous pouvons également vérifier si une valeur est dans (in) ou n'est pas dans (!in) un intervalle ou une collection :

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")
}

Une autre possibilité consiste à vérifier si une valeur est (is) ou n'est pas (!is) une valeur d'un type spécifique. Remarque : en raison des smart casts, vous pouvez accéder aux méthodes et propriétés de ce type sans vérifications supplémentaires.

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

when peut également être utilisé pour remplacer une chaîne de if-else if. Si aucun argument n'est fourni, toutes les conditions de branche sont de simples expressions booléennes, et une branche est exécutée lorsque sa condition est vraie :

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

Exemples

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 不在该区间范围内")
    }
}

Sortie :

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

Utilisation de in dans wheninopérateur pour vérifier si une collection contient une instance :

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")
    }
}

Sortie :

apple is fine too
Autres extensions