【Kotlin】三項演算子がないんだね

kotlin

はじめに

タイトルの通り、Kotlinで三項演算子を使おうと思ったので調べたのですが、

Kotlinに三項演算子はありません。

なので、その代わりの方法を紹介します。

解決策

if式またはwhenを使いましょう。

Page not found · GitHub Pages

kotlinのifやwhenは値を返すことができます。

コードの概要

if式の書き方

val 変数 = if (条件) {
    一致した時の値
} else {
    不一致だった時の値
}

このように書くと、条件に一致した場合と不一致の場合で値を切り替えることができます。もちろん、else ifで条件を重ねることも可能です。(ほどほどに)
なお、if式の場合はelseケースを省略することができません。(前述リンクのif式項の最後に明記)

when式の書き方

ifと同様にwhenを使って値を返すこともできます。(when = Javaなどswitch命令)

val 変数 = when (条件比較する値) {
    条件1 -> 条件1に一致した時の値
    条件2 -> 条件2に一致した時の値
    else  -> 条件1,2に一致しなかった時の値
}

サンプルコード

記載しているコードはpaiza様が提供しているブラウザツールを使って動作確認しました。Kotlin以外にも多くの言語が対応しているので、試し書きにはちょうどいいですね。

プログラミングテストで腕試しできる【paiza】

if式を使う場合

コード

fun main(args: Array<String>) {
    val num = (0..10).random()
    val ifMsg = if (num < 5) { "小さい" } else { "大きい" }
    println("${ifMsg} num=${num}")
}
  • 2行目:0~10までのうち、ランダムな値を取得
  • 3行目:2行目の結果を条件に、if式を使って文字列をifMsgに設定
  • 4行目:文字列と数値を画面に出力

実行結果

大きい num=8

乱数を使っているため必ずしも上記の結果になるわけではないですが、イメージとして。

when式を使う場合

コード

fun main(args: Array<String>) {
    val num = (0..10).random()
    val whenMsg = when(num) {
        0,1,2 -> "2より小さい"
        3,4,5 -> "3から5"
        else  -> "5より大きい"
    }
    println("${whenMsg} num=${num}")
}
  • 2行目:0~10のうち、いずれかの値を取得
  • 3~7行目:2行目の結果を基に、条件に当てはまる文字列を取得
  • 8行目:文字列と数値を画面に表示

実行結果

2より小さい num=0

こちらも乱数を使っているため必ずしも上記の結果になるわけではないです。

最後に

自分はJavaを書くことが多いのですが、幸いKotlinに触れることもあり、ぽつぽつと学習させてもらってます。

比較的新しめの言語なので、かゆい所に手が届くモノが多いなー、と思う反面、三項演算子のように当たり前に使ってたものがないとびっくりしますね。

ただ、ifやwhenを式として扱えるので使いどころは案外多いのかもなぁと思いました。

コメント

タイトルとURLをコピーしました