普通のnullチェック

メソッドの冒頭でnullかどうかをチェックして以下のように処理を行なう。

  • nullならreturnする
  • nullでないなら処理を行なう

例えばnullableな数値の足し算は以下のようになる。

fun addNullable(x: Int?, y: Int?): Int? {
  if (x == null || y == null) {
    return null
  }

  return x + y
}

ちなみに引数のxyInt?型だがreturn x + yxynullチェック後なので推論されてInt型となっている。

エルビス演算子を使ったnullチェック

エルビス演算子?:を使うとKotlinらしいコードになる。

エルビス演算子は

x ?: y

という式で、以下のように評価される式を構成する。

  • xnullでないならxの値
  • xnullならyの値

?:の後ろのyの部分はreturn式も書けるので以下のように書ける。

fun addNullable(x: Int?, y: Int?): Int? {
    val a = x ?: return null
    val b = y ?: return null

    return a + b
}

xyInt?のようにnullableな型となっているが、 abIntのようにnon nullableな型となる。

エルビス演算子でthrowもできる

returnの代わりにthrowで例外を投げることもできる。

fun addNullable(x: Int?, y: Int?): Int? {
    val a = x ?: throw Exception("x is null") 
    val b = y ?: throw Exception("y is null")

    return a + b
}