iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
Mobile Development

Kotlin Android 30天,從 0 到 ML (Machine Learning)系列 第 6

Kotlin Android 第6天,從 0 到 ML - null safety ​

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
 

判斷或是操作變數就要
https://ithelp.ithome.com.tw/upload/images/20210911/20121643FIpYzzP02e.png

改用下列三種方式

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

https://ithelp.ithome.com.tw/upload/images/20210911/20121643uV37kHOK1i.png

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

上一篇
Kotlin Android 第5天,從 0 到 ML - 函式
下一篇
Kotlin Android 第7天,從 0 到 ML - list 、set 和 map
系列文
Kotlin Android 30天,從 0 到 ML (Machine Learning)30

尚未有邦友留言

立即登入留言