Kotlin 条件分岐の制御構文

IF式

ifステートメントには、ブール式と1つ以上のステートメントが含まれています。

// 従来の使い方
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

IF式の結果を変数に割り当てることができます。

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

これは、Javaのように三項演算子が必要ないことを示します。そのため、IF式によって次の式を簡単に実装できます。

val c = if (condition) a else b

実例

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

実行の結果は次のとおりです。

x=0
c=2

使用間隔

in演算子を使用して、数値が指定された間隔内にあり、間隔の構文がx..yであるかどうかを検出します。

実例

fun main(args: Array<String>) {
    val x = 5
    val y = 9
    if (x in 1..8) {
        println("x は間隔にあります")
    }
}

実行の結果は次のとおりです。

xは間隔にあります

When 式

分岐が条件を満たすまで、when式はパラメータをすべての条件分岐と順番に比較します。

when は式またはステートメントとして使用できます。 式として使用する場合、条件を満たす分岐の値は式の値になります。ステートメントとして使用する場合、個別の分岐の値は無視されます。

whenは、他の言語の switch演算子に似ています。 一番シンプルな構文は次のとおりです。

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // このブロックを注意してください
        print("x は 1ではありません。 2ではありません")
    }
}

whenには、elseはswitchのdefaultと同じです。 他の分岐が条件を満たさない場合、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")
}

別の可能性は、値が特定の型の値である(is)または特定の型の値ではない(!is)ことを検出します。 ヒント:スマート変換のおかげで、追加の検証なしでこの型のメソッドとプロパティにアクセスできます。

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

whenは、 if-else ifチェーンの代わりに使用できます。 パラメータが指定されていない場合、すべての条件分岐はシンプルなブール式であり、条件分岐がtrueの場合、分岐が実行されます。

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

実例

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 -> { // このブロックを注意してください
        print("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<String>) {
    val items = setOf("apple", "banana", "kiwi")
    when {
        "orange" in items -> println("juicy")
        "apple" in items -> println("apple is fine too")
    }
}

出力の結果:

apple is fine too
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です