calloner

博客园 首页 新随笔 联系 订阅 管理

 

有件你会注意到的事情是,几乎所有的 Scala 的控制结构都会产生某个值。这是函数式语言所采
用的方式,程序被看成是计算值的活动,因此程序的控件也应当这么做。你也可以把这种方式看
做早已存在于指令式语言中的一种趋势(函数调用返回值,被调用函数更新被当作参数传入的输
出变量也归于此类)的逻辑推演。另外,指令式语言经常具有三元操作符(如 C,C++和 Java
的 ?: 操作符),表现得就像 if ,却产生值。 Scala 采用了这种三元操作符模型,但是把它称为 if 。
换句话说, Scala 的 if 可以产生值。于是 Scala 持续了这种趋势让 for , try 和 match 也产生值。

使用 val 而不是 var 的第二点好处是他能更好地支持等效推论:equational reasoning。在表达式
没有副作用的前提下,引入的变量等效于计算它的表达式。因此,无论何时都可以用表达式替代
变量名。如,要替代 println(filename) ,你可以这么写:
println(if (!args.isEmpty) args(0) else "default.txt")
选择权在你。怎么写都行。使用 val 可以帮你安全地执行这类重构以不断革新你的代码。

posted on 2018-01-10 11:13  calloner  阅读(131)  评论(0编辑  收藏  举报