scala中的var 与 val

来源:互联网 发布:国密sm4算法 编辑:程序博客网 时间:2024/06/06 02:10

val 与 var

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

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

// In JavaString filename = "default.properties";       if (options.contains("configFile"))       filename = (String)options.get("configFile");//In Java anotherfinal String filename = options.contains("configFile") ? options.get("configFile") : "default.properties";//In Scalaval 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

0 0