【Kotlin】名前がわからないあの演算子一覧

Kotlin
この記事は約3分で読めます。

kotlinのサンプルプログラムを見ていると見たことがない演算子を見かけることがありました。Googleで検索しても、なかなかヒットせず苦労したので、調べた内容を備忘録としてまとめました。

「.?」safe call operator(ドット クエスチョンマーク)

nullableな型の変数のプロパティにアクセスするときに、NullPointerExceptionが起きないように、アクセスできます。

?.を使うと、アクセスしようとしている変数がnullの場合はnullを返し、そうでない場合はそのプロパティの値を返します。

Kotlin
val a: String? = null
val b: String? = "hello"
println(a?.length) // null
println(b?.length) // 5

変数anullなのでnull、変数bnullじゃないので、lengthプロパティの値に評価されます。

「:?」エルビス演算子(コロン はてなマーク)

エルヴィス・プレスリーの髪形に似ていることから、その名がついたエルビス演算子😕。この演算子は、演算子の左側がnullじゃない場合は、左の式を返し、nullの場合は右の式を返します。

まずはエルビス演算子を使わない場合を見てみます。

Kotlin
val c: String? = "Elvis"
val d: String? = null
val length1: Int = if (c != null) c.length else -1
val length2: Int = if (d != null) d.length else -1
println(length1) // 5
println(length2) // -1

エルビス演算子を使うとこのように書けます。上のコードに比べてコードが短く読みやすいですね。

Kotlin
val c: String? = "Elvis"
val d: String? = null
val length1: Int = c?.length ?: -1
val length2: Int = d?.length ?: -1
println(length1) // 5
println(length2) // -1

「!!」not-null assertion operator(ビックリマーク2つ/エクスクラメーションマーク2つ)

nullableな型の変数をnon-nullableに変換させる演算子です。

Kotlin
val e: String? = "nullable"
prinln(e!!.length) // 8

変数eはnullableですが、この場合明らかにnullではないので!!演算子を使い、non-nullableに変換しています。

Kotlin
val f: String? = null
println(f!!.length) // NullPointerException

一方で、fはnullableでnullが代入されているので、!!演算子を使うとNullPointerExceptionが起きてしまいます。

この演算子の使いどころがいまいちわからないので、わかる方教えていただけたら嬉しいです。

おすすめUdemy講座

はじめての Kotlin【Java 知らなくてOK!丁寧な解説で Android に必要な Kotlin の基本を学習】 icon

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