统一访问原则

   Scala统一访问原则:对于无参数方法的方法形式 obj.width 又像是在直接引用 obj 对象的 width 属性,这种统一性就叫做统一访问原则,就是说代码不因为属性是通过字段实现还是方法实现而受影响。例如前面的 def width: Int 可以写成 val width: Int,然而 obj.width 访问形式不变。由于 Java 中没有统一访问原则,所以关于是 string.length(),而不 string.length;是 array.length,而不是 array.length() 的问题会突然间让人很迷惑。有了统一访问原则的 Scala,以及结合 length 方法是无副作用的,就会直接写成 string.length 和 array.length,而犯不着为此犹豫不决。

  但是有些情况下,即使对程序本身运行没有什么影响,但是考虑到用户的阅读,开发者在编写Scala代码时还是需要遵守一些规范。Scala鼓励将不带参数且没有副作用的方法定义为无参数的风格,即省略空括号。但是对于有副作用的方法不要这样做,因为那样看起来像是在使用字段。例如:println()。另一种判断的方法是:如果你调用的函数执行了操作就使用括号,但如果仅提供了对某个属性的访问,那么省略空括号。

  统一访问原则只是Scala在对待字段和方法上比Java更统一的一个方面。另一个差异是Scala里的字段和方法属于相同的命名空间。这让字段可以重写无参数方法。例如抽象类中的一个抽象方法,可以在子类中将其实现为一个字段,而无需修改父类中的抽象方法定义。Java为定义准备了四个命名空间,分别是字段、方法、类型和包;Scala仅有两个命名空间:值(字段、方法和单例对象), 类型(类和特质名)

  统一访问原则带来的另一个规则是:Scala里禁止在同一个类中用同样的名称定义方法和字段,尽管Java里允许这样做。

posted @ 2016-08-13 21:37  Jiang_Xi  阅读(778)  评论(1编辑  收藏  举报