Kotlin 的空指針檢查
Kotlin 是一種空安全的語言,這意味著它強制開發者明確地處理可能的空值。在 Kotlin 中,所有的變量默認都是非空的,除非顯式地標記為可為空。
聲明可為空的變量
你可以通過在類型后面添加??
?來聲明一個變量可以為空:
var nullableString: String? = null |
安全調用操作符(?.)
當你不確定一個對象是否為空時,可以使用安全調用操作符(?.
)來避免空指針異常。如果對象是空的,則整個表達式的結果也是?null
,而不會拋出異常。
nullableString?.length // 如果 nullableString 為 null,則返回 null;否則返回其長度 |
非空斷言操作符(!!)
如果你確定一個對象不為空,但編譯器無法推斷出這一點,你可以使用非空斷言操作符(!!
)來告訴編譯器該對象非空。但是,如果對象實際上是空的,使用?!!
?將會拋出?NullPointerException
。
val length = nullableString!!.length // 如果 nullableString 為 null,則拋出 NullPointerException |
Elvis 操作符(?:)
Elvis 操作符(?:
)允許你提供一個默認值,當左側表達式為?null
?時返回這個默認值。
val lengthOrDefault = nullableString?.length ?: 0 // 如果 nullableString 為 null,則返回 0 |
字符串內嵌表達式
Kotlin 允許你在字符串字面量中嵌入表達式,這通常被稱為字符串模板。你可以使用?$
?符號來引用變量或表達式,并將其嵌入到字符串中。
字符串模板
val name = "Kotlin" | |
val greeting = "Hello, $name!" // 輸出:Hello, Kotlin! | |
val sum = 1 + 2 | |
val result = "The sum is $sum" // 輸出:The sum is 3 |
如果你需要在字符串模板中嵌入更復雜的表達式,可以使用花括號?{}
?來包圍表達式。
val price = 10.5 | |
val formattedPrice = "The price is | |
$$ | |
{price.format(Locale.getDefault(), "%.2f").trim()}" // 輸出:The price is $10.50 |
函數的參數默認值
在 Kotlin 中,你可以為函數的參數提供默認值,這使得函數調用更加靈活。當調用函數時,可以省略具有默認值的參數。
帶有默認值的函數參數
fun greet(name: String, prefix: String = "Hello"): String { | |
return "$prefix, $name!" | |
} | |
// 調用函數時,可以省略 prefix 參數 | |
val greeting = greet("Kotlin") // 輸出:Hello, Kotlin! | |
// 也可以明確指定 prefix 參數 | |
val customGreeting = greet("Kotlin", "Hi") // 輸出:Hi, Kotlin! |
在上面的例子中,greet
?函數有一個名為?name
?的必需參數和一個名為?prefix
?的可選參數(帶有默認值?"Hello"
)。當調用?greet
?函數時,可以省略?prefix
?參數,因為它有一個默認值。如果你需要提供一個不同的前綴,可以明確指定它。