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字节码生成器,所以对于?:的名称还是有可信度的,以后交流技术时就叫他猫王运算符吧,虽然来源说法有点扯,但总算有个解释了。
后续:在《Kotlin编程权威指南》中也找到了一样的说辞,这本书是美国的一个非常出名的培训机构“Big Nerd Ranch”出版的,书中说因为?:很像Elivs的标志性发型,所以叫Elivs运算符。