scala雾中风景(0): 序

最近看了一部分ruby作者松本行弘的新书《代码的未来》,对于未来语言的畅想有一段我比较认同:

通过反观过去半个世纪以来编程语言的进化方向,我认为编程语言绝对不会按照保罗.格雷厄姆所说,向着“小而干净”的方向进化。现在的编程语言,无论时功能上还是语法上都已经不是那样单纯了,虽然也曾经有人努力尝试将这些语言变得更小更简单,但包括保罗.格雷厄姆自己所设计的Arc在内,都决不能算是成功的尝试。

在我看来,编程语言的进化动机,不是工具和语言本身的简化,而是将通过这些工具和语言所得到的结果(解决方案)更简洁地表达出来。近半个世纪以来,编程语言不断提供愈发高度的抽象化特性,也正是为了达到这个目的。因此我们可以很自然地认为,这种趋势在将来也应该会继续保持。

在语言的进化中,scala是一门大胆尝试的语言。喜爱它的人认为它是一门聪明的语言,大胆进取,吸纳百家之长;而讨厌它的人则认为它复杂,语法过于灵活容易表达混乱,复杂的类型系统难以把握,不够纯粹,品味太烂。这是个哲学和审美问题,我不愿陷入争论,更偏向于实用主义。

对scala的批评和恐惧者中有很多是对于它的表现形式深感不爽的,尤其是没有函数式背景的初学者。实际上scala灵活的表达背后是有“历史习俗”或理论支撑的,如果了解了这些背后的东西,或许它不再那么晦涩。

这是我在向很多新人布道scala过程中发现的问题,促使我想通过一些具体的例子来理解其背后的缘由,一但熟悉了这些领域(主要是函数式)的一些概念和门路,再看scala就不容易被一些表面的东西所困惑。

注:这一系列针对初学scala的人。

scala雾中风景(0): 序》上有5条评论

  1. leezq

    博主,您好:
    又来请教您问题了,这几天在看《快学scala》,看到如下代码
    import scala.beans.BeanProperty
    class PersonBean {
    @BeanProperty
    var name:String = _
    }

    想请教下var name:String = _。这里的_(下划线)代表什么意思啊。没见到过这种语法

    回复
    1. hongjiang 文章作者

      表示某个类型的默认值,引用类型的话是null

      回复
      1. leezq

        谢谢博主!
        再请教您一个问题,scala中的类级别的访问控制符的问题。
        在用scala的eclipse的插件新建scala class的时候,我惊奇的发现,scala中的class level的访问控制符有三种default(相当于java中的public,这个好理解)、protected(实验结果表明该修饰符默认是当前包级别可见,不过可以利用protected[其他包来修改])、private(貌似默认是当前类可见,不过可以利用private[其他包] 来修改)这三种。
        但是关于protected和private的类访问控制符,我现在还是没模糊。博主能给扫下盲吗(主要是他们的后面带中括号的这种,貌似可以通过制定相同的包名,可以达到private=protected的效果)。

        最后我发现好像private和protected后面的中括号中貌似只能写包名,不能写具体的类名啊。

        麻烦博主了。

        回复
      2. leezq

        var name:String=_貌似只支持var类型,不支持val类型,是吧,博主?

        回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注