kotlin である変数が null のときと null でないときそれぞれに処理を書く方法は,2つあります.
- if 文
- スコープ関数 + elvis 演算子
普通に if 文を使うと,null チェックはできますが,可変な(var
で宣言された)変数の場合は,スマートキャストが効きません.
var a: String? = "a"
var b: String = ""
if (a != null) {
// a が null でないときの処理
// エラー
b = a
} else {
// a が null のときの処理
b = "b"
}
スコープ関数とelvis演算子を使えばうまく値を取り出すことができますが, そのままだと単一の式しか書くことができません.
式でないものも書けません.
var a: String? = "a"
var b: String = ""
a?.let {
// ok
b = it
} ?: b = "b" // NG 代入は式ではない
nullable な変数を notnull に束縛した上で,null なときも null でないときも複数行の処理を行いたいときは, run が見やすくていいと思います.
a?.let {
// a が null でないときの処理
b = it
} ?: run {
// a が null のときの処理
// 複数行処理を書けて便利
b = "b"
}