在Effective Scala文章由Twitter,他們說以下內容:爲什麼Scala匹配優於if語句?
使用返回澄清和增強可讀性,但不是你會在命令式語言 ;避免使用它們來返回計算的結果 。代替
def suffix(i: Int) = {
if (i == 1) return "st"
else if (i == 2) return "nd"
else if (i == 3) return "rd"
else return "th"
}
喜歡:
def suffix(i: Int) =
if (i == 1) "st"
else if (i == 2) "nd"
else if (i == 3) "rd"
else "th"
但使用匹配表達式優於任一:
def suffix(i: Int) = i match {
case 1 => "st"
case 2 => "nd"
case 3 => "rd"
case _ => "th"
}
在這個特定的例子中,爲什麼匹配表達式優於if/else?
'很可能會提高性能bit.'什麼'一個bit'指任何粗略的估計? –
@KevinMeredith在字節碼中,它實際上用單個tableswitch指令替換了3個比較(堆棧中的變量加載)。對於3次比較它應該是相當小的,除非它在一些緊密的循環中。但是在緊張的環境中,JIT開始了,然後情況可能會有很大的變化。此外,這個「用於匹配的發射開關」行爲非常脆弱:它僅適用於與文字常量和「最終val」標識符匹配。儘管如此,從可讀性和編碼風格來看,「匹配」也更好。因此,它陷入了「避免過早悲觀化」的情況:它總是優於一系列「if」 – Kolmar