Kotlinでオプショナル型(Optional)の変数を扱う方法
Kotlinにはオプショナル型(Optional)という考え方があり、これは値が空である(null)を許容するかどうかを指定できます。
Kotlinでオプショナル変数を定義・宣言する方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// nullを許容しない var str: String // nullを許容する var str2: String? // エラーになる // str = null // エラーにならない str2 = null // nullを許容して初期化 var str3: String? = null // こちらでも初期値はnullになっている var str4: String? |
このように null を許容する場合は、型名のあとに ? をつけてあげる必要がある。
もちろん、一番下のようにnullで初期化することも可能。
オプショナル変数をアンラップ(unwrap)する
オプショナル変数は通常の変数と異なる。ので、通常の変数と同じように扱う場合はアンラップという一手間が必要になる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
fun main() { var str: String = "hoge" var str2: String? = "hoge" // エラーになる // str = null str2 = null print(str2) print(str2!!) // エラーになる // fuga(str2) // エラーにならない fuga(str2!!) // エラーにならない moe(str2) } private fun fuga(str: String) { // Some Action } private fun moe(str: String?) { // Some Action } |
ちょっとまだメソッドなどについて説明してないが、Stringに?がついていないfuga()ではエラーになり、moe()ではエラーにならない。
これはwrapされた変数とwrapされていない変数が明確に区別されているためだ。
また !!
を使うことでwrapを取り外す(unwrap)することができるので、その状態にすればfuga()もエラーにならなくなる。
しかし、unwrap(!!)は強制unwrapとも呼ばれ、失敗したときにエラーで、最悪アプリが強制終了してしまうなどの弊害があるため、多用はおすすめできない。
安全にアンラップする方法は後に書くこととする。
ディスカッション
コメント一覧
まだ、コメントがありません