Kotlinでのwhen式の使用

2692 ワード

whenは、あるブランチが条件を満たすまで、そのパラメータをすべてのブランチ条件と順次比較する.whenは、式としても文としても使用できます.式として使用される場合、条件を満たすブランチの値は式全体の値であり、文として使用される場合、個別のブランチの値は無視されます.whenは、他の言語のswitchオペレータに似ています.最も簡単な形式は次のとおりです.
when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { //      
        print("x    1 ,    2")
    }
}
whenにおいて、elseswitchdefaultと同じである.他のブランチが条件を満たさない場合、elseブランチが評価されます.
複数のブランチを同じ方法で処理する必要がある場合は、複数のブランチ条件をカンマで区切ることができます.
when (x) {
    0, 1 -> print("x == 0 or x == 1")
    else -> print("otherwise")
}

また、(in)または(!in)の区間または集合にない値を検出することもできます.
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")
}

別の可能性は、1つの値が(is)または(!is)特定のタイプの値ではないことを検出することである.注意:インテリジェントな変換により、追加の検出を必要とせずに、このタイプのメソッドとプロパティにアクセスできます.
fun hasPrefix(x: Any) = when(x) {
    is String -> x.startsWith("prefix")
    else -> false
}
whenは、if-elseおよびif鎖の代わりに使用されてもよい.パラメータが指定されていない場合、すべてのブランチ条件は単純なブール式であり、ブランチの条件が真の場合、ブランチは実行されます.
when {
    x.isOdd() -> print("x is odd")
    x.isEven() -> print("x is even")
    else -> print("x is funny")
}

≪インスタンス|Instance|emdw≫
fun main(args: Array) {
    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         ")
    }
}

出力結果:
x == 0 or x == 1
x    1 ,    2
x        
whenでは、in演算子を使用して、セット内にインスタンスが含まれているかどうかを判断します.
fun main(args: Array) {
    val items = setOf("apple", "banana", "kiwi")
    when {
        "orange" in items -> println("juicy")
        "apple" in items -> println("apple is fine too")
    }
}

出力結果:
apple is fine too