はじめに
今回はKotlinのnull安全についてJavaとの比較を交えながらまとめたいと思います。
null安全とは?
null安全とは、コードからnull参照の危険性を排除することを目的としたKotlinの機能であり、null参照を使用とするとコンパイルエラーが発生する。
この機能はJavaで頻出のNullPointerExceptionを避けるために有効であると考えられます。
Non-Null型とNullable型
KotlinにはNon-Null型とNullable型が存在しており、以下のように実装する。
var str : String = "あいうえお" //Non-Null型
str = null //コンパイルエラー
var str2: String? = "かきくけこ" //Nullable型
str2 = null //問題なし
上記のように、nullを格納できないNon-Null型、nullを格納できるNullable型が存在することで、潜在的なnull参照の危険性を排除し、視覚的にnullの存在を把握することができることは可読性や保守性の向上に繋がると私は感じました。
Nullable型の処理について(ここからが本題)
次に、Nullable型の処理について、もう少し詳細を記述します。
【疑問】
Nullable型にnullが格納できるのであれば、Nullable型の値を参照すればNullPointerExceptionが発生するのでは?
上記の疑問に関しては、Nullable型を参照するためにはnullが格納されていないかを事前に確認する必要があり、確認していない場合はコンパイルエラーが発生する仕組みになっている。
var str2: String? = "かきくけこ"
print("この文字列の長さは${str2.length}です。") //コンパイルエラー
コンパイルエラーが発生するため、nullが格納されていないことを確認する必要がある。
var str2: String? = "かきくけこ"
if (str2 != null) //nullではないことを確認している
print("この文字列の長さは${str2.length}です。")
else
print("この文字列はnullです。")
また、場合によってはエルビス演算子を用いることでより簡潔に記述できる。
(Nullable型の変数)?.(trueの時の処理)?:(falseの時の処理)
まとめ
Javaを学習しつつ、Kotlinを学習していると、より理解が深まりやすく利便性についても享受できると感じています。引き続き、学習していきたいと思います。