在个人学习scala的过程中,产生了写一系列随笔的想法,这些随笔包括:翻译自官网、其他英文网站的文章以及自己的心得体会,本文章作为这个系列中的第一个。

Scala是一种现代多范式编程语言,旨在以简介,优雅和类型安全的方式来表达公共编程模式。它集成了面向对象和函数式编程的特性。

  由于本人能力所限,以及对scala还处于初级阶段,有任何错误或者问题,欢迎大家指正,多谢。

Scala是面向对象的

Scala是一种纯粹的面向对象语言,从这个层面上来讲,每个值都是一个对象。对象的类型和行为是用类和特征(trait)进行描述的。类可以被子类扩展,并且使用一种灵活的[基于mixin的组合机制][2]来替代多重继承。

  原文链接:

Scala是函数式的

Scala也是一种函数式语言,从这个层面来讲,每个函数都是一个值。Scala提供了轻量的语法定义匿名函数,支持高阶函数,允许函数嵌套,并且支持currying。Scala的case类和对模式匹配的内置支持被用于很多函数式编程语言中。单例对象提供一种便捷的方式来组织不是类成员的函数。

另外,在right-ignoring
sequence模式的帮助下,Scala的模式匹配概念可以自然扩展到XML数据的处理,方法是对extractor对象进行一般扩展。这种情况下,for
comprehensions对于制定查询是非常有用的。这些特性让Scala非常适合开发类似于web
services的应用。

  

Scala是静态类型的

Scala配备了一个类型系统,强制以安全一致的方式静态地使用抽象。特别地,类型系统支持:

  • 泛型类
  • 型变注释
  • upper和lower类型边界
  • 内部类和抽象类型作为对象成员
  • 复合类型
  • 显式类型自引用
  • 隐式参数和转换
  • 多态方法

局部类型推断机制关注的是用户不需要用冗余的类型信息注释程序。综合来说,这些特性为程序抽象的安全重用和软件的类型安全扩展提供了一个强大的基础。

 

Scala是可扩展的

在实践中,特定应用的开发通常需要特定的语言扩展。Scala提供了一种独特的语言组合机制,这种机制可以让我们非常轻松地以库的形式添加新的语言结构:

  • 任何方法都可以作为中缀或后缀运算符
  • 闭包会根据期望类型(目标类型)自动构建

上面两种特性的结合使用会方便新语句的定义,而不需要扩展语法和使用类似宏的元编程。

Scala被设计为可以和流行的Java 2 Runtime Environment
(JRE)进行交互。特别是,与主流面向对象的Java编程语言无缝交互。像annotations和Java泛型这些Java新特性在Scala中都有直接的类似特性。那些在Scala存在但在Java中没有的特性,如默认参数和命名参数,都尽可能地接近Java进行编译。Scala和Java有相同的编译模型(独立编译,动态类加载)并且能够访问大量高质量的库。

  scala是一个现代的多范式编程语言,通过简洁、优雅和类型安全的方式搭建通用编程模型。它巧妙的结合了面向对象和函数式编程特性。

  scala是面向对象的

  scala是一个纯粹的面向对象语言,所有的值都是对象。类型和对象的行为通过class和trait的方式进行描述。class可以被子类继承,通过灵活的mixin模式组装机制来实现多继承的效果。

  scala是函数式编程

  scala也是一种函数式编程,每个函数都是值。scala提供一种轻量语法来定义匿名函数,它支持高阶函数,它支持内置函数,支持柯里化。scala的case
class和内置的规则匹配模型,在许多函数式编程语言中都在使用。singleton
object提供了一种方便的方式,将不属于类实例的函数组合。

  进一步讲,scala的规则匹配概念扩展自XML数据处理,借助先行匹配的模式,通过extractor
object实现。在上下文中,for
推导式有助于准确查询。这些特性使scala成为开发web服务类似应用的理想语言。

  scala是静态类型

  Scala拥有强大的静态类型系统,抽象可以通过安全的、一致的方式进行使用。

  一个本地类型引申机制帮助用户不需要编写冗余的类型信息。综合上述特性,scala为安全的抽象复用和类型安全扩展提供了一个强有力的基础。

  scala是可扩展的

  实践中,特定领域应用的开发需要特定领域语言的支持。scala提供一种统一的语言组合机制。非常方便地通过库的方式添加新的语言组件。

  Scala与JRE有很好的交互。特别是与主流面向对象编程语言Java的结合非常自然。Java的新特性例如注解和泛型受到scala的启发。那些在Java中没有类似的特性,如默认值和命名式参数,也会以合理的方式进行编译。scala与Java有类似的编译模型,允许访问数以千计的已经存在的高质量库。

相关文章