Javaの三項演算子
Javaでは以下の形で条件式がtrue
かfalse
かで真式か偽式を評価する式。
条件式 ? 真式 : 偽式
例えば、a
、b
のうち小さい方として評価される式は以下のように記述できる。
int x = (a < b) ? a : b;
Kotlinには上記3項演算子は存在しない。
KotlinはJavaに似てるからと同じノリで上記を書こうとしてもコンパイルエラーになる。
Kotlinでは三項演算子の代わりにif式を使う
Kotlinのifは式なので、3項演算子の代わりとなる。
if (条件式) 真式 else 偽式
a
、b
のうち小さい方として評価される式は以下のように記述できる。
val x = if (a < b) a else b
条件内の変数がnullだったら(nullならデフォルト値としたいなら)エルビス演算子を使う
よくある特別なパターンとしてnull
ならデフォルト値を入れるというパターンがある。
String x = (a != null) ? a : "";
上記のJavaプログラムKotlinのif式で記述すると以下のようになる。
val x = if (a != null) a else "";
Kotlinのエルビス演算子を使えばもっとスマートに書ける。
val x = a ?: ""
エルビス演算子「?:
」を使った式「a ?: ""
」は以下の様に評価される。
- 左辺(a)がnullなら右辺("")
- 左辺(a)がnullでないなら左辺("")
上記の様に評価されるため、nullチェックしてデフォルト値を入れるパターンがスマートに実現できる。
エルビス演算子については以下の記事も参照。
≫ 【Android,Kotlin】Null許容型(?)をunwrapするパターン
エルビス演算子を複数重ねる
以下のように2つの変数をnullチェックし、両方nullならデフォルト値とするパターンを考える。
- 変数
a
がnullでなければa
- 変数
a
がnullで、変数b
がnullでなければb
- 変数
a
,b
がnullなら空文字列
上記パターンをif式で記述すると以下のようになる。
val x = if (a != null) a else (if (b != null) b else "")
if式の場合、1段ネストしただけでもかなり読みづらくなる。
一方、上記パターンをエルビス演算子で記述すると以下のようになる。
val x = a ?: b ?: ""
可読性はそれほど落ちていない。
変数が増えても同様にいくつでも重ねられる。
val x = foo
?: bar
?: baz
?: hoge
?: fuga
?: ""
\確かな知識を身に着けたい、Androidアプリ開発を学びたい人にオススメ!/