Scala编程(第5版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

7.1 if表达式

Scala的if表达式与很多其他语言中的if语句一样,首先测试某个条件,然后根据是否满足条件来执行两个不同代码分支中的一个。下面给出了一个以指令式编程风格编写的常见例子:

这段代码定义了一个变量filename并将其初始化为默认值,然后用if表达式检查是否有入参传入这个程序。如果有,就用传入的入参改写变量的值;如果没有,就保留变量的默认值。

这段代码可以写得更精简,因为Scala的if表达式是一个能返回值的表达式(我们在第2章的第3步讲到过)。示例7.1给出了不使用var但达到与上面的例子同样效果的做法:

示例7.1 Scala的条件判定初始化常用写法

这一次,if表达式有两个分支。如果args不为空,则选取第一个元素args(0);否则选取默认值。if表达式的返回值是被选取的值,这个值进一步被用于初始化变量filename。这段代码比前面给出的稍微短了一些,但真正的优势在于它使用的是val而不是var。使用val是函数式的编程风格,就像Java的final变量那样,有助于你编写出更好的代码。它也告诉读这段代码的人,这个变量一旦被初始化就不会改变,不必再扫描该变量整个作用域的代码来弄清楚它会不会变。

使用val而不是var的另一个好处是对等式推理equational reasoning)的支持。引入的变量“等于”计算出它的值的表达式(假设这个表达式没有副作用)。因此,在任何你打算写变量名的地方,都可以直接用表达式来替换。比如,可以不用println(filename),而是写成下面这样:

这是你的选择,两种方式都是可行的。使用val可以让你在代码演进过程中安全地执行这种重构。

只要有机会,尽可能使用val,它会让你的代码更易读且更易于重构。