1.0 Scala简介

2016-01-16 23:42:03 1,522 0

Scala是一种现代的多范式( multi-paradigm)编程语言,旨在以简洁、优雅、类型安全的方式表达常用的编程模式。它平滑地集成了面向对象和函数式编程语言的特性。

术语解释:多范式,指的是一种语言可以用多种编程范式,例如面向对象,或者函数式等

Scala是面向对象的

Scala是一种纯粹的面向对象的语言,从这个角度来说,Scala中所有类型的值都是一个对象。 类型和对象的行为被描述类(classes)和特性(traits)。Classes可以通过子类进行扩展,并且使用灵活的 mixin的组合机制来替代多继承。

术语解释:

特性(traits) ,类似于Java中的接口,定义实现类必须实现什么方法

mixin的组合, Mixin编程是一种开发模式,是一种将多个类中的功能单元的进行组合的利用的方式,这听起来就像是有类的继承机制就可以实现,然而这与传统的类继承有所不同。通常mixin并不作为任何类的基类,也不关心与什么类一起使用,而是在运行时动态的同其他零散的类一起组合使用。

Scala是函数式的

Scala也是一种函数式编程语言,从这个角度来说,Scala中的每个函数都是一个值。Scala提供了一种轻量级的语法来定义匿名函数,支持高阶函数、函数可以嵌套, 并支持柯里化。 Scala的case类以及其内置的支持模式匹配,在许多函数式编程语言中使用的模型代数类型。单一对象提供了一个方便的方式来组函数不是类的成员。 单一对象提供了一个方便的方式来组合不是同一个类中成员的函数。


此外,Scala关于模式匹配中的 右忽略序列模式延伸到了xml格式数据的处理中。 在这方面,序列解析用于定制查询。这些特点使Scala适合开发像Web服务应用程序。

术语解释:柯里化 ,在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。


Scala是静态类型

Scala配备有表现力的类型系统,可以以一种安全的方式进行使用。特别的,类型系统支持:


* 泛型类(generic classes)

* 方差注解(variance annotations)

* 上部和下部类边界(upper and lower type bounds)

* 内部类和抽象类型作为对象成员

* 复合类型(compound types)

* 显式类型的自我引用(explicitly typed self references)

* 隐式参数和转换(implicit parameters and conversions)

* 多态方法(polymorphic methods)


局部类型推理机制考虑的是让用户不需要在程序中再编写冗余的类型信息。总之,这些功能提供了编程抽象的安全、再利用和软件的类型安全扩展的强大基础。


Scala是可扩展的

在实践中,特定领域应用程序的开发通常需要领域专用语言扩展。Scala提供了可以很容易地顺利地库的形式增加新的语言结构的语言机制的独特组合:


* 任何方法可以被用作中缀或后缀运算符

* 闭包会根据所期望的类型自动构造(目标类型)。


联合使用这两种特性有利于新的语法定义,无需扩展语法,并没有使用类似宏的元编程设施。

Scala的设计与流行的Java SE(JRE)很好地互操作。具体地,与主流的面向对象的Java编程语言的相互作用尽可能地平滑。像新的Java功能,注解和Java泛型在Scala中有直接类似物。某些Scala功能,没有对应的Java类似物,如默认和命名参数,编译上尽可能合理的接近Java。Scala有相同的编译模型(独立编译,动态类加载),如Java和允许访问成千上万的现有高质量的类库。

术语解释:

Scala是扩展的:指的是我们可以使用Scala定义新的语法。例如我们在C++中就可以通过宏来扩展语法。Scala使用的是上面两种特性的组合来支持语法的扩展。

领域专用语言 :DSL,domain specified language,指的是针对某个特定研究领域,使用某种专门的编程语言。而领域专用语言,通常是在某种支持自定义语法的语言中进行扩展。DSL的作用主要是,让专门研究某个领域的人,看到这种编程语法,能立刻明白程序的含义。


一般情况下,如果某种编程语言支持元编程,意味着我们我们可以自己定义这种编程语言的语法。

例如,我们通常把Java称之为“没有枪、没有刀、以及没有棍棒的C++”,主要的指的是,Java本身并没有提供一种方式可以支持我们对于语言的语法进行微调,或者彻底的改变语言的语法。例如我们在C++中就可以通过宏来扩展语法。