长的帅,连Code都是香的 - Elvis Operator ?:

前言

当初参加Kotlin读书会的时候听到Elvis Operator的来历觉得很酷,在之后写kotlin的时候也时常会使用到,算是很实用的运算子。

Elvis Operator其实是来自猫王的名字 - Elvis Presley,据说是因为当初创造这个运算子出来的人觉得这个运算子看起来很像猫王... 但其实我觉得比较像JOJO

用法

Result = First Operant ?: Second Operant

Elvis Operator 非常直观,

当 First Operant 的内容"不为" Null 时,则回传 First Operant当 First Operant 的内容"为" Null 时,则回传 Second Operant

也可以理解为右侧运算元是当左侧运算元为 Null 时的回传预设值

给个栗子

1. 正常用法

var firstOperant1: String? = "I'm not null"var firstOperant2: String? = null// Return First Operantvar result1 = firstOperant1 ?: "Secondary Not-Null String"println("$result1") // print I'm not null// Return Second Operantvar result2 = firstOperant2 ?: "Secondary Not-Null String"println("$result2") // print Secondary Not-Null String

2. 可以用在 Funtion 的 Return

fun retrieveString(firstOperant: String?): String {    return firstOperant ?: "Secondary Not-Null String"}println(retrieveString("I'm not null")) // print I'm not nullprintln(retrieveString(null)) // print Secondary Not-Null String

3. 可以 Return Exception

fun retrieveString(firstOperant: String?): String {    return firstOperant ?: throw IllegalArgumentException("The firstOperant is null! Oops!")}println(retrieveString("I'm not null")) // print I'm not nullprintln(retrieveString(null)) // print exception message

4. 神级用法,目前还没有这么使用过

val numList = listOf(1, 2, 3, 4, 5)val result1 = numList.firstOrNull { it == 4 } ?: numList.firstOrNull { it == 5 } ?: "Oops"println("$result1") // print 4val result2 = numList.firstOrNull { it == 5 } ?: numList.firstOrNull { it == 6 } ?: "Oops"println("$result2") // print 5val result3 = numList.firstOrNull { it == 6 } ?: numList.firstOrNull { it == 7 } ?: "Oops"println("$result3") // print Oops

结论

或许你看到这边会想说 ?: 就是一个null check的运算子,为什么不按照Java的写法?
val resutl = if(firstOperant != null) firstOperant else secondOperant

其实可以,这两种写法其实是没有差别的,但若採用 Elvis Operator 的话,整体上可以少写一点 code,所以如果让我选择我还是会偏好前者的写法。
另外还有一个很重要的原因!!!多用帅哥命名的运算子写code,或许我也会变比较帅吧


本文章同时发布于[Android在走,Kotlin要有]系列文章
https://www.coderbridge.com/@RobinChien/f84fef99ba074b16aa520c7f095fe737


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章