Kotlin Android 第6天,從 0 到 ML - null safety
如果有寫java 的朋友,一定有寫過一堆來判斷null的程式,來防止程式runtime的時候出會錯,kotlin null safety 這個語法真的在判斷null 上一大救星,也是回不去java的一大特點。
不行設定為null, IDE會提示你不行為null
var ironAfterDay:String = "This is Day6 Null Safety"
ironAfterDay = null
要允許設為 null 要加上?
var ironAfterDay:String? = null
判斷或是操作變數就要
改用下列三種方式
if (ironAfterDay != null) {
println("ironAfterDay size"+ironAfterDay.length)
}
println("ironAfterDay size"+ (ironAfterDay?.length))
println("ironAfterDay size"+ (ironAfterDay?.length ?: "day6"))
但真的硬要給null ,要加上!! ,但真的是null app 就會 crash
println("ironAfterDay size"+ (ironAfterDay!!.length)) // Carsh
Elvis 操作符號,像是if else ,如果 ironAfterDay為null ,就給一個預設值。
//ironAfterDay = null
println("ironAfterDay = "+ironAfterDay)
//public inline fun Any?.toString() = this?.toString() ?: "null"
null 函式呼叫
//call function
println("ironAfterDayLength = "+ ironAfterDayLength(ironAfterDayNull(ironAfterDay)))
println("ironAfterDayLength = "
+ ironAfterDayNull(ironAfterDay)?.let { ironAfterDayLength(it) })
}
//Function allow return null
private fun ironAfterDayNull(ironAfterDay: String):String?{
return null
}
允許傳入函式的參數為 null,在函式內就要判斷,或是直接 throw Exception,兩種方式
//Function allow parameter null , need add argument process null
private fun ironAfterDayLength(ironAfterDay: String?):Int{
//case 1 return 0
if (ironAfterDay != null) {
return ironAfterDay.length
}else{
return 0
}
//case 2 add throw Exception
if (ironAfterDay == null) {
throw Exception("ironAfterDay is Null")
}
return ironAfterDay.length
}
null safety 叫 空安全,還是用英文好了,翻中文真的很怪。
現在要android studio 故意要null的範例,還真的有點不好寫,不用等到build,直接就檢查不過給你紅字呀。
https://kotlinlang.org/docs/null-safety.html