代码改变世界

Scala初探

2010-12-28 22:29  RayLee  阅读(358)  评论(0编辑  收藏  举报

如果你平时不关心编程语言的发展,可能就不知道还有其它语言的存在以及语言的发展方向。当前,社区正热衷于函数式编程,它或许是下一代编程语言的趋势。Scala正是函数式编程的一种语言,与之相应的还有微软的F#。

有了C,C++,Java,为什么要学习Scala? 作为一个以Java为主要工具的程序员,我想谈一下自己的感受。

学习一种新的语言使我更深刻的理解旧的语言

Java语言的一些概念是不是仍然很抽象,不很清晰?也许你已经能够熟练的使用Java,但藏在Java背后的一些设计思想你是否明白? 当你了解了Scala,并把它与Java比较后,一些较模糊的问题渐渐就清楚了。

Java是一种面向对象的语言,但不是纯粹的面对对象语言。Java语言中包含primitive type和静态类方法,这些都不是面向对象的思想。在学习Java的过程,你很可能就忽略了这些细节,因为文档中都强调Java是面向对象的。

Java中的String是immutable的,String类型的对象在多线程环境中是不需要互斥访问的,因为它是immutable的。

还有更多这样的细小问题,或关于使用优劣,或关于设计思想,总之,有了比较才会明白的更多,才能更好的选择。

Scala表达精简

语言是思想的体现,在准确的表达思想时,力求简单的表示方法。Scala在这方面有很大的进步。来看看几个例子。

编写一个Student类,包含两个私有成员变量,name和age。

Java实现:

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Scala实现:

class Student(name: String, age: Int)

查找一个字符串中是否包含大写字母

Java实现:

boolean nameHasUpperCase = false;
for (int i = 0; i < name.length(); i++) {
    if (Character.isUpperCase(name.charAt(i))) {
        nameHasUpperCase = true;
        break;
    }
}

Scala实现:

val nameHasUpperCase = name.exists(_.isUpperCase)

Scala的这种精简大大提高了程序编写的速度,很有吸引力。

 

一种语言的出现,必定是要解决之前语言中存在的某些问题。从这样一个更高的层面来掌握你所使用的工具,将大大提高理解的深度。Scala现在还不会作为我项目的主要工具,但我认为学习它仍然很有意义。