貓王運算子

android_cai_niao發表於2020-10-09

Java中的三目運算子:

boolean isOpen = true
String desc = isOpen ? "開" : "關"

Kotlin中沒有與之對應的三目運算子,有一個很像但功能不同Elvis(貓王)運算子:?:,示例如下:

var address: Address? = null
val city = address?.city ?: "未知"

?:也可用來在表示式為null時直接返回,如下:

fun foo(bar: Bar?) {
    bar ?: return
    ...
}

?:稱為貓王運算子,功能為:如果表示式的值不是null,則返回表示式的值,否則返回後面的值。

Elvis這個單詞在有道詞典中翻譯就只有一個貓王的意思,很是詭異,為什麼要叫貓王啊?在《Kotlin實戰》的書上找到了答案,書中是這麼描述的,把?:順時間旋轉90度,它看起來就像貓王一樣,如下圖:
在這裡插入圖片描述
,如果你喜歡聽更嚴肅的名稱,可以把?:叫作null合併運算子。

Elvis(貓王)是美國一個很出名的搖滾歌手/演員。說像貓王,這感覺有點扯,但《Kotlin實戰》的作者還是有一定說服力的,作者之一在2003年起就在JetBrains公司工作,他是Kotlin最早的貢獻者之一,建立了最初版本的Kotlin JVM位元組碼生成器,所以對於?:的名稱還是有可信度的,以後交流技術時就叫他貓王運算子吧,雖然來源說法有點扯,但總算有個解釋了。

相關文章