Scala 的预期目标是将面向对象、函数式编程和强大的类型系统结合起来,同时仍然要能写出优雅、简洁的代码。 php
Scala 视图将如下三组对立的思想融合到一种语言中: 算法
面向对象编程是一种自顶向下的程序设计方法,将代码以名词(对象)作切割,每一个对象有某种形式的标识符(self/this)、行为(方法)和状态 (成员变量)。识别出名词而且定义出它们的行为后,再定义出名词之间的交互。实现交互时,必须将这些交互放在其中一个对象中(而不能独立存在)。现代面向 对象设计倾向于定义出”服务类“,将操做多个领域对象的方法集合放在里面。这些服务类虽然也是对象,但一般不具备独立状态,也没有与它们所操做的对象无关 的独立行为。 编程
函数式编程方法经过组合和应用函数来构造软件。函数式编程一般倾向于将软件分解为其须要执行的行为或操做,并且一般采用自底向上的方法。函数式编 程:对不可变性的强调有助于编写并发程序,视图将反作用推迟到尽量晚,提供了很是强大的对事物进行抽象和组合的能力。消除反作用使得对程序进行推理 (reasoning)变得容易。 并发
对比: 函数式编程
面向对象编程 | 函数式编程 |
对象的组合(名词) | 函数的组合(动词) |
封装有状态的交互 | 推迟反作用 |
迭代算法 | 递归算法 |
命令流 | 延迟计算 |
… | 模式匹配 |
… | |
协变,Convariance,+T or ? extends T:类型能够强制转换为子孙类;
逆变,Contravariance,-T or ? super T:类型能够强制转换为祖先类;
不变,Invariance :类型彻底不能被强制转换。 函数
函数式编程的精髓在于尽量地推迟反作用。 性能
Scala 作了如下几个设计决策来提升代码表达力: 优化
操做符(operation notation)是 Scala 的一个能力,能够把方法看成操做符。无参数的方法能够用做后缀操做符,只有一个参数的方法能够看成中缀操做符;方法名的最后一个字符若是是冒号 ”:“,则方法的调用方向反转。 this
在定义匿名函数时(又称 lambda),Scala 提供了占位符语法。能够用 “_” 关键字做为函数参数的占位符。若是使用多个占位符,每一个相应位置的占位符对应于相应位置的参数。 spa
用好隐式转换是操纵 Scala 类型系统的关键。隐式转换的基础应用场景是按需自动地把一种类型转换为另外一种,但它也能够用于有限形式的编译时元编程。要使用隐式转换必须把它关联到某个做用域,能够经过伴生对象或明确导入来作关联。
HotSpot 编译器的优化技术:
http://coderbee.net/index.php/scala/20150711/1262