在Twitter的Effective Scala文章中,他们说:
使用返回来澄清和增强可读性,但不是像你想的那样 用命令语言;避免使用它们来返回结果 计算。而不是
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?
答案 0 :(得分:4)
一般来说,match
更具可读性,可以更清楚地说明您的意图。但是在这个确切的示例中,它有一个额外的好处,match
不会发出一系列if
s,而是发出switch
字节码指令(tableswitch
一个案例),这可能会提高一点性能。
您可以断言,在这种情况下,switch
将使用@switch
注释发出:
def suffix(i: Int) = (i: @switch) match {
case 1 => "st"
case 2 => "nd"
case 3 => "rd"
case _ => "th"
}
答案 1 :(得分:1)
模式匹配必不可少的是数据类型提取。有关示例和讨论,请参阅Extractor Objects和The Neophyte's Guide to Scala Part 1: Extractors。
在上面的示例中,数据类型证明是微不足道的,其好处主要来自可读性。