Kotlin Day 3 : null 和 安全運算子 ? 和 Elvis運算子 ?:
--
Kotlin的null安全性與Java的差異
在程式設計中,null
是一個特殊的值,用來表示變數不指向任何有效的對象。Kotlin和Java都使用null
來表示這種狀態,但它們對null
的處理方式有著根本的不同。
Kotlin的null安全性
Kotlin語言設計時考慮到了null
所帶來的問題,並在語言的類型系統中引入了null安全性。Kotlin的類型系統將變數分為可空類型和不可空類型:
-
不可空類型:例如,
String
類型的變數不能被賦值為null
。如果嘗試這樣做,編譯器會報錯,這樣可以在編譯階段捕獲潛在的錯誤。
-
可空類型:如果需要允許變數為
null
,則必須在類型後加上問號?
,例如String?
。這樣的變數可以安全地被賦值為null
。 var str: String? = null // 合法
Kotlin的設計使得開發者在使用可空類型時必須明確處理null
,例如使用安全調用操作符?.
來避免空指針異常,這樣可以有效減少運行時錯誤的發生。
Java中的null
相對而言,Java的null
處理較為寬鬆,所有的引用類型變數都可以被賦值為null
,這使得開發者在使用時需要額外小心,以避免NullPointerException
(NPE)。在Java中,null
是一個關鍵字,表示一個對象引用未指向任何有效的對象。這意味著開發者在使用Java時,必須在運行時進行null
檢查,以確保變數不會在未初始化的情況下被使用。
? 是安全呼叫運算子
?: 是Elvis 運算子 : wiki ; 當左邊值為 null 時, 回右邊值, 否則回左邊值
可空類型與安全呼叫運算子在Kotlin中的使用情境
在Kotlin中,變數可以被宣告為可空類型(nullable type),這意味著該變數可以持有null
值。這種設計使得開發者能夠更靈活地處理可能不存在的值,並且通過使用安全呼叫運算子?.
來避免空指針異常(NullPointerException)。以下是一些情況,說明何時使用可空類型及其安全呼叫運算子會比不可空類型更恰當。
1. 當變數的值不確定時
在某些情況下,變數的值可能來自於外部來源,例如用戶輸入或API回應,這些值可能是null
。在這種情況下,將變數宣告為可空類型是合適的,因為這樣可以避免在未檢查值是否為null
的情況下直接使用它。
範例:
結果:
2. 當需要處理可選值時
在某些情況下,變數可能代表一個可選的值,例如配置選項或查詢結果。使用可空類型可以清楚地表達這種可選性。
範例:
留言
張貼留言