iT邦幫忙

0

長的帥,連Code都是香的 - Elvis Operator ?:

  • 分享至 

  • xImage
  •  

前言

當初參加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 Operant
var result1 = firstOperant1 ?: "Secondary Not-Null String"
println("$result1") // print I'm not null

// Return Second Operant
var 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 null
println(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 null
println(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 4

val result2 = numList.firstOrNull { it == 5 } ?: numList.firstOrNull { it == 6 } ?: "Oops"
println("$result2") // print 5

val 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


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言