1. Scala有多cool
“Put productivity & creativity back in the hands of developers”
1.1. 速度!
Java的运行速度:基于JVM,和Java运行速度相当。有个好的编译器(Scalac)和运行时(JVM)。Ruby、Perl、Python对大项目运行效率很无奈。
Python/Ruby的编程速度:有更多的内建库和数据结构,编程就更快,Scala在完全继承Java和.NET的标准库的基础上,还扩展了更丰富有用的函数库。
类库和运行速度有关系吗?——很大程度上有,众多专家已经在类库中准备了充分优化的稳定算法,Scala对Java Collection算法进行直接包装或者直接调用,使用类库算法,不用担忧自造轮子的运行效率。
Scala是静态语言,Scalac和Javac是同一作者,编译成.class后运行于JVM平台,近20年那么多大公司投入进行的优化也不是白搭。对于大部分的应用来说,使用Scala不用再顾虑运行速度,它可能不是最快,但至少逼近Java,而不像Groovy、JRuby、Jython 那般与Java有高达数十倍的效率差距。
1.2. 易用的数据结构
List-Map-Tuple及其丰富特性支持让你解决数据结构问题时游刃有余。
List(1,31,4,3,53,4,234) filter (10<) filter (100>) // List(31, 53)
val (a,b) = List(1, 31,4,3,53,4,234) partition (10>) // a=List(1,4,3,4), b=List(31,53,234)
def info(p:Person) = (name, age, email) // info._1, info._2, info._3
1.3. OOP+FP
l 适当地选用OOP或者FP,能够使表达相对另一种更加清晰准确。
l 实际可见的生产力在于:一个应用中的部分代码尤其是高知识凝聚的代码如数学函数和设计模式,一般来说不会自己编写,而是会来自于现成的Java库,或者其他语言,或者伪代码。我们可以很容易地把过程语言、面向对象语言、函数式语言中的代码“翻译”成Scala代码。Scala的混血性给我们的实际使用提供了便利。
l 语言特色能够塑造编程者的思维: C++也能使用抽象基类设计多重继承,但Java的接口引导你走得更远;Java也能设计类型安全的静态方法(final static),但Scala鼓励你这样做并逐步从OOP到达FP的彼岸,而且来去自如。
1.4. 动态+静态
Scala虽然是一门彻头彻底的静态语言,但又具备了现代动态语言的很多方便和灵活:
l 不需要冗余的类型声明
l 可以在已有类上增加新方法(implicit转换和Dynamic trait)
l 可以把不继承共同父类的不同类型对象传到方法中
l 可以做静态语言的Refactoring
l 不用象动态语言那样测试代码比业务代码还多
l 编译静态语言的性能
l Read-Eval-Print Loop交互解释器(注:Linux下的用户体验远好于Windows下)
1.5. DSL
Scala可以把xml/html处理、数学公式表达、SQL查询等包装的更优雅、更合理,为使用者提供更好的API。这也使Scala的程序也更可读,从而更易于维护。
1.6. 够复杂
不同的思考模式:Java是先写后想,Scala是先想后写(其实FP大都如此)。
你不要指望把Scala作为初学者的第一门编程语言(个人非常赞同),这门语言甚至不是初级程序员能够掌控的——换句话说,能够读懂和写Scala代码,说明你是一个不折不扣的资深程序员,或者更准确一点,是资深Java程序员。
1.7. 够有趣
还看这句话:“Put productivity & creativity back in the hands of developers”。其实不仅限于Scala,对于所有的编程语言来说,一门语言是否“好玩”有趣,能否激起创作欲,才是最关键的,这比语言风格、运行速度、工具支持、社区文化都来得重要。
有些人对一门语言会玩一辈子,就像Lisp、Haskell和Smalltalk的拥趸;而有些人会不断寻找下一个玩意儿,就像原来玩Java的一些人发现更好玩的Ruby和Python之后,倒戈狂喷Java,力挺后者;Groovy/Grails的玩家在很短的时间里面,写了无数的扩展和Plugin应用;学习Scala,能很多好玩的地方,能用它有激情地去写一些振奋人心的应用出来!
1.8. 开发社区
Scala开发/用户社区气氛良好,基本都是资深开发者以及有一定经验的用户,不会碰到太弱智的事(提问、争吵),除了语言和工具开源免费,最权威和最好的书也都是免费的(包括Lift社区)