LoginSignup
5
3

More than 3 years have passed since last update.

Kotlin入門:null許容型とは

Last updated at Posted at 2020-02-21

実際に読んでみて良かった書籍について情報を発信していますので、
よろしければTwitterのフォローもお願いします。

前提条件

Javaの基本的な構文について理解していると読みやすいです。

簡単にKotlinを実行するにはこちら

Kotlinではnullを許容しないのが既定

Javaではnullが許容されていました。

String str = null;

null状態の変数に対してアクセスしようとすると、
NullPointerExceptionという例外が発生します。

そこで、Kotlinではこの例外を発生させないためにnullを許容しないのが既定となっています。

fun main() {
    var name = "山田"
    name = null
    println(name)
}

このコードを実行すると

Null can not be a value of a non-null type String

というエラーが発生します。

どうしてもnullを許容したいときは型名の後方に「?」をつけると許容されます。

fun main() {
    var name:String? = "山田"
    name = null
    println(name)
}

このコードを実行すると

null

と表示されます。

型名? をNullable型(null許容型)と言います。

非null型への代入

Nullable型から非null型への代入はできません。
Nullable型にnullが代入されている可能性があるからです。

fun main() {
    var name1:String? = "山田"
    var name2:String= name1
    println(name2)
}

このコードを実行するとエラーになります。

Type mismatch: inferred type is String? but String was expected

セーフコール演算子

Nullable型のメンバーにアクセスするためには(?.)演算子を使います。

fun main() {
    var name1:String? = "山田"
    println(name1?.length)

    var name2:String? = null
    println(name2?.length)
}

このコードを実行すると

2
null

以上が表示されます。

!!演算子

Nullable型を強制的に非null型に変換する!!演算子があります。
しかし、Nullable型の中身がnullでないことが明らかな場合での使用が推奨されます。

fun main() {
    var name1:String? = "山田"
    println(name1!!.length)
}

結果は以下の通りです。

2

中身がnullだと

Exception in thread "main" kotlin.KotlinNullPointerException

が発生してしまいます。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3