You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// p174上val s:String=null// コンパイルエラー(Null can not be a value of a non-null type String)
funmain(args:Array<String>) {
// p174下val s:String?=nullprintln(s) // null// p175
s.toUpperCase() // コンパイルエラー (Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?)
}
3. Smart Cast
条件分岐 によるチェック
list 12.5 NotNull への Smart Cast
funmain(args:Array<String>) {
// list 12.5val a:String?=nullval b:String?="Hello"if (a !=null) {
println(a.toUpperCase())
}
if (b !=null) {
println(b.toUpperCase()) // HELLO
}
}
list 12.6 Smart Cast の例
is 型 -> ...
funmain(args:Array<String>) {
// list 12.6val list:List<Any> =listOf(1, 'a', false)
for (e in list) {
val result:Any?=when (e) {
isInt-> e +5// e は Int 型isChar-> e.toUpperCase() // e は Char 型isBoolean-> e.not() // e は Boolean 型else->null
}
println(result)
}
}
実行結果
6
A
true
4. 安全呼び出し
list 12.7 null なら null を返すだけ
funmain(args:Array<String>) {
// list 12.7val a:Int?=5val aInc =if (a !=null) a.inc()
elsenullprintln(aInc) // 6
}
list 12.8 安全呼び出し
?.
funmain(args:Array<String>) {
val a:Int?=5//// list 12.8//val aInc = a?.inc() // aInc は `Int? 型`println(aInc) // 6
}
list 12.9 NotNull な 引数 を取る関数 に Nullable を渡す
funsquare(i:Int): Int= i * i
funmain(args:Array<String>) {
val a:Int?=5val aSquare =if (a !=null) square(a)
elsenullprintln(aSquare) // 25 (`aSquare` は Int? 型)
}