0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kotlinのnull安全とは?

Posted at

概要

はじめてkotlinで実装する機会が訪れ、今までjavaしか触ったことのなかった私は少し苫だった点がありました...。

それは、kotlinは基本的にnullを許容しないということです。
全体的な実装方法はjavaと似ているので、慣れると実装はしやすいなと感じました。
逆に、javaと似ていながらも少し違うことで小さなエラーに悩まされることがありました。

初心者ですので、すべて正しいわけではないと思いますが、自分が理解した範囲でメモ程度にまとめておきたいと思います。

今回は、vue.jsのrouterを使用します。

null許容とnull許容ではないパターン
example.kt
val nonNullable: String = null //NG
val nullable: String? = null //OK

null許容にさせたい場合は型の後に"?"を加えます。
そうすることで、この変数はString型とnullを許容するということを定義できます。

null許容の変数には呼び出し方にも注意!

メソッド間でのnull許容の変数の受け渡しには注意が必要です。

User.kt
// null許容の変数なのでIntに"?"をつける必要がある
fun getAge(age: Int?) Int?{
    age = 20
return age
}
Name.kt
val user: User = User

// null許容の変数
var age: Int = null

// null許容ではない変数
var userAge: Int = 0

// Userクラスから年齢を取得
var userAge = user.getName(age) // userAgeはnull許容ではないため、コンパイルエラーが起きる!

↓ そのため↑のUserクラスから年齢を取得する場合は
下記のようにif文やエルビス関数などを使用してnullチェックを行う必要がある。

Name.kt
// if文
if(!getName(age)){
    var userAge = user.getName(age)
}

// エルビス関数
user.getName(age)?.let{
    // getName(age)の戻り値がnullではない場合の処理
    var userAge = user.getName(age)
}?: user.getName(age) //nullであった場合ここの処理が実行される

null許容である変数とnull許容ではない変数をうまく使い分ける必要がある。
下記のように無理やりnull許容の変数を「nullではないです!」と宣言することもできる
しかし、安全とは言えないのであまり使わない方が良いそう...

example.kt
var userAge = user.getName(age)!! //"!!"をつけることでnullで非nullであることを無理やり宣言
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?