【Kotlin】Null安全のメリットがピンとこなかったので自分でわかるまで調べてみました。

はじめに

kotlin・Java初心者なのでコードリーディングをしていたら、わからないことがたくさんあります。本日はNull安全がわからなかったので調べて軽く備忘録用に。

※調べが足りない部分もあると思いますが、不備などがあれば教えていただければ助かります。

そもそもNullとは?

値が入ってないよ〜!何も参照してないよ〜!って意味。

kotlinはJavaと違って、初期値を入力していないとコンパイルエラーが出る仕組みなのです。(これがNull安全なのだが、この段階では筆者はメリットがわからなかった)

val number:Int = null //  compile error

val number:Int = 1  //OK

Javaだとnullが通る

Int number = null; //OK

この2つを比較した上で今回の登場人物コンパイルエラー実行時エラー

コンパイルエラー

コンパイル段階でどこがぬるぽで落ちているのかわかる

 val number:Int = null
    println(number)

//Error: Kotlin: Null can not be a value of a non-null type Int

実行時エラー

目的の処理の時に不具合が発生する

Android開発の例だと、intentで値の受け渡しがnullの時などに落ちる時がある。これはデバッグが大変だった。(もしかするといい方法があるかもしれない)

結論

Null安全は実行時エラーの可能性があるところをコンパイル段階でエラー出してくれるありがたい存在。

NonNullとNullable

NonNullは、Nullを許容しないデフォルトの型 Nullableは、Nullを許容してくれる型

NonNullはこれまでに説明した通りなので、Nullableを軽く説明

やはりどうしても、nullが入ってしまうときがある! 例)フォーム入力などはユーザー入力後出ないと結果がわからないので、Nullにする必要性がある。

このような場合は、型の定義の後に?をつけてあげれば、Nullable型になりNullを入れてもコンパイルエラーではなくなる!

val name:String? = null
val age:Int? = null
val live:String? = null
:
:

そこから先はNullableの扱い方で、大きく分けて!!演算子安全呼び出しエルビス演算子の3つがある。

これに関しては、後ほど記事にするかも。。

サーバーサイドも手をつけないと・・