开始学习Scala,下面的内容大部分从Scala官网翻译过来,有几个地方翻译的不是很好,表述不清楚的地方大家可以浏览Scala官网,多指教。
Scala offical website is http://scala-lang.org
I think scala-lang means scalable language.
What is Scala?
1、A Scalable Language(可扩展语言)
Scala is an acronym for "Scalable Language".
Scala是"Scalable Language"的缩写。
对于名称的理解,Scalable Language意味着既可以书写一行语句并输出结果,也可以完成大型、复杂的任务(比如Twitter,LinkedIn和Intel等)。
2、Object-Oriented(面向对象)
Scala是存粹的面向对象语言。
从概念上说,每个值(value)都是对象,每个操作都是函数调用。
Scala以类和接口的方式支持高级的组件架构(component architectures )。
许多其他语言中的设计模式,在Scala中得到原生态的支持。
比如,通过object定义支持单例模式,通过模式匹配支持访问者模式。利用隐式类,Scala甚至允许对已经存在的类增加新的操作,无论这些已经存在的类是Scala中的还是Java中的。
3、Functional(函数式)
尽管Scala语法相当传统,但是Scala是成熟的(full-blown)函数式语言。
Scala有你期望的所有(函数式语言特征),包括一等函数(first-class functions),高效且数据结构固定的库,以及基于变化的不变性偏好(a general preference of immutability over mutation.)。
与其他函数式语言不同,Scala允许(开发者)以一种渐进的、容易的方式迁移到函数式风格。开始时,你可以将Scala认为是没有分号的Java语言。逐渐的可以利用安全的函数模式替代程序中易变的状态。作为Scala程序员,我们认为这种进阶方式是个好主意。同时Scala不是死板的语言,你可以以你喜欢的任何方式使用它。
4、Seamless Java Interop(与Java的无缝交互)
Scala运行在JVM上。Java的类和Scala的类可以自由混合使用,不论他们是在一个项目(project)中还是在不同项目中。二者之间甚至可以相互引用,Scala编译器包含Java编译器的一个子集(subset),所以Scala编译器可以理解这种循环依赖。
对Scala来说,Java类库,框架,工具都是可以使用的。Build工具,比如maven,集成开发环境,比如Eclipse,IntelliJ,Netbeans,框架,比如Spring或者Hibernate,都可以无缝的应用于Scala。Scala可以运行在所有的通用JVM上以及Android上。
5、Functions are Objects(函数是对象)
Scala的方式是开发一个小系列的构造,并可以灵活的结合。这也暗示了Scala面向对象和函数式的性质。面向对象与函数式二者高度统一,所以可以将二者认为是硬币的正反面。
例子:Scala中的函数是对象,函数的类型是正规的类。在Haskell,F#或者ML语言中的数据类型,在Scala中以类继承方式实现。任意类都可以实现模式匹配。
6、Future-Proof(与时俱进)
对于提供一致性和同步处理的可扩展服务软件,多核并行效率,云的分布式处理,Scala很有优势。
函数式特征使得Scala可以编写安全高效的多线程代码。Scala对于易变状态的较少依赖,以及Scala的特征和actors,这些为在高层次抽象组织一致性系统提供了强大工具。
7、Fun(乐趣)
最重要的是,Scala乐趣无穷!