上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
7.1 if表达式
Scala的if跟很多其他语言一样,首先测试某个条件,然后根据条件是否满足来执行两个不同代码分支当中的一个。下面给出了一个以指令式风格编写的常见例子:
这段代码定义了一个变量filename并初始化成默认值,然后用if表达式检查是否有入参传给这个程序。如果有,就用传入的入参改写变量的值。如果没有入参,则保留变量的默认值。
这段代码可以写得更精简,因为(我们在第2章的第3步讲到过)Scala的if是一个能返回值的表达式。示例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,它们会让你的代码更易读也更易重构。