KotlinDive

プログラミング言語 Kotlin についての入門ブログです。

条件分岐(if、when)

if

基本的な使い方

Kotlinでは、ifは式として機能しています。 つまり、ifが値を返して、その値をそのまま変数に代入したりできるということです。
もちろん、通常の条件分岐としても利用できます。


fun main(args: Array) {
    // 通常の使い方
    val num = 10

    if ((num % 2) == 0) {
        println("偶数です")
    } else {
        println("奇数です")
    }

    // 式としての使い方
    val num2 = 5
    val str = if ((num2 % 2) == 0) "偶数です" else "奇数です"

    println(str)
}

偶数です
奇数です

リターンされる値

ifでリターンされる値は、実行されたブロックの一番最後の式の値になります。


fun main(args: Array) {
    testIf(-100)
    testIf(50)
    testIf(1)
}

fun testIf(num: Int) {
    val ifReturn = if (num < 0) {
        println("Run (num < 0) block.")

        num * 2
    } else if ((num % 2) == 0) {
        println("Run ((num % 2) == 0) block.")

        "偶数です"
    } else {
        println("Run else block.")

        1234.5678
    }

    println("if expression return is ${ifReturn}.")
}

Run (num < 0) block.
if expression return is -200.
Run ((num % 2) == 0) block.
if expression return is 偶数です.
Run else block.
if expression return is 1234.5678.

when

基本的な使い方

whenはJavaC言語でいうとswitchのようなものです。
ifと同じように式として機能し、値を返すことができます。
switchのdefaultに相当するものが、whenにもelseという形であります。


fun main(args: Array) {
    val num = 4

    // 通常の条件分岐として利用
    when (num) {
        1 -> println("num is 1.")
        2 -> println("num is 2")
        3 -> println("num is 3.")
        4 -> {
            // 処理をブロックで記述することも、もちろん可能です。
            println("num is 4.")
        }
        else -> {
            println("num is something else.")
        }
    }

    // 値を返す式として利用
    val ret = when (num) {
        1 -> {
            println("num is 1.")

            123
        }
        2 -> {
            println("num is 2.")

            "456"
        }
        3 -> {
            println("num is  3.")

            123.456
        }
        else -> {
            println("num is something else")

            null
        }
    }

    println("ret is ${ret}.")
}

num is 4.
num is something else
ret is null.

さまざまな条件設定

whenでは、かなり柔軟な分岐の条件設定ができます。
例えば、カンマで区切って複数の条件を並べたり、定数ではなく式を条件にすることもできます。


fun main(args: Array) {
    val str = "100"
    val num = 100.0
    str.isEmpty()

    when (str) {
        "cat", "dog", "bird" -> println("animal")
        num.toString() -> println("100.0")
        is String -> println("String")
        else -> println("else.")
    }
}

String