wakremichi_if_when

【Kotlin】条件分岐何使ってる?if?when?【Android】

#Kotlin
written by じゅんじゅん

皆様ご無沙汰しております。

Androidエンジニアのじゅんじゅんです。

オミクロン株来てますねぇ。。。
比較的、飲み会など楽しいコミュニケーションができる場が多くなってきたと思ったんですけどね。。。

皆さんも気を付けてお過ごしください・・・( ;∀;)

はじめに

というわけで皆さん。

Kotlinでコードを組む際に、条件分岐を行うケースが存在すると思います。

if だったり、whenだったりを使用しますが、
どちらも同条件で使用した場合、以下の様にアプリ上も同じように動作します。

/*「if」のコード*/
val a = 0
val b = 0

if (a = b) {
    log.d("test", "aとbは等しい")
} else {
    log.d("test", "aとbは等しくない")
}

/*「if」のログ出力*/
test::aとbは等しい
/*「when」のコード*/
val a = 0
val b = 0

when {
    a = b -> log.d("test", "aとbは等しい")
    else -> log.d("test", "aとbは等しくない")
}

/*「when」のログ出力*/
test::aとbは等しい

今回は、ifとwhenの使い分けについて解説していきたいと思います。

条件内処理が複雑な場合・・・

前項までの内容では、同様の処理を書いた場合にwhenのほうが簡潔に記載できていると思います。
行数も少なく済んでおり可読性も高いと思います。

しかし、条件内の処理が増えた場合はどうでしょうか。

ifとwhenで同様の処理を記載してみていきましょう。

/*「if」のコード*/
val a = "FFFF"
var stringToInt = 0
var intToString = ""

if (a == "FFFF") {
    // String文字列の"FFFF"を16進数のIntに変換
    stringToInt = a.toIntOrNull(16)   // 65535
    // Intの65535を16進数のString文字列に変換
    intToString = foo.toString(16)    // FFFF
    log.d("test", "intToString = " + intToString )
} else {
    stringToInt = a.toIntOrNull(16)
    intToString = foo.toString(16)
    log.d("test", "intToString = " + intToString )
}

/*「if」のログ出力*/
test::intToString = FFFF
/*「when」のコード*/
val a = "FFFF"
var stringToInt = 0
var intToString = ""

when (a){
    "FFFF" -> {
        // String文字列の"FFFF"を16進数のIntに変換
        stringToInt = a.toIntOrNull(16)   // 65535
        // Intの65535を16進数のString文字列に変換
        intToString = foo.toString(16)    // FFFF
        log.d("test", "intToString = " + intToString )
    }
    else -> {
        stringToInt = a.toIntOrNull(16)
        intToString = foo.toString(16)
        log.d("test", "intToString = " + intToString )
    }
}

/*「when」のログ出力*/
test::intToString = FFFF

どうでしょう?

whenの場合ネストが深くなるため、条件内の処理が多い場合見づらくなっていませんか?(私はそう思います・・・笑)

結局どうなの?

可読性の向上を図って、条件内の処理が複雑になる場合はifがおススメ。
対象的に条件内の処理が簡潔にできる場合は、whenがおススメ。

さいごに

どうでしたでしょうか。

今後条件分岐を実装する際には、気にかけて見てみるといいと思われます。

その他Android関連の記事