scala中的var 与 val

val 与 var

设置val后,就无法对 val 进行更改,这与 Java 语言中 final 变量的操作方式是相同的。不可变本地变量最显著的副作用是很容易实现并发性。

在 val 与 var 之间的不同,实际上,它们的不同之处在于 —— 一个是只读的值,另一个是可变的变量。通常,函数语言,特别是被认为是 “纯” 函数语言(不允许带有副作用,比如可变状态)的那些函数语言,只支持 val 概念;但是,因为 Scala 要同时吸引函数编程人员和命令/对象编程人员,所以这二种结构它都提供。也就是说,Scala 编程人员通常应该首选 val 结构,并在明确需要可变性的时候选择 var。原因很简单:除了使编程更容易之外,val 还能确保程序的线程安全性,Scala 中的一个内在主题是:几每次认为需要可变状态时,其实都不需要可变状态。 让我们从不可变字段和本地变量(val)开始,这是展示上述情况的一种方法,甚至对最坚定的 Java 怀疑论者也是如此。从 Java 中的 final开始介绍可能不是很合理,或许是因为 Java 的非函数特性,尽管此原因不可取。一些好奇的 Java开发人员可能想尝试一下。

// In Java
String filename = "default.properties";
       if (options.contains("configFile"))
       filename = (String)options.get("configFile");
//In Java another

final String filename = options.contains("configFile") ? options.get("configFile") : "default.properties";

//In Scala
val filename =
    if (options.contains("configFile"))
       options.get("configFile")
    else
       "default.properties"

使用val是函数式的风格,并能以差不多与Java的final变量同样的方式帮到你。它让代码的读者确信这个变量将永不改变,节省了他们扫描变量字段的所有代码以检查它是否改变的工作。 使用val而不是var的第二点好处是他能更好地支持等效推论:equational reasoning。在表达式没有副作用的前提下,引入的变量等效于计算它的表达式。因此,无论何时都可以用表达式替代变量名。

选择权在你。怎么写都行。使用val可以帮你安全地执行这类重构以不断革新你的代码。




参考文献

http://www.ibm.com/developerworks/cn/java/j-scala/ 系列文章

programming in scala

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值