《深刻理解 Scala》第一章 — Scala 一种混合式编程语言

Scala 的预期目标是将面向对象、函数式编程和强大的类型系统结合起来,同时仍然要能写出优雅、简洁的代码。 php

Scala 视图将如下三组对立的思想融合到一种语言中: 算法

  • 函数式编程和面向对象编程
  • 富有表达力的语法和静态类型
  • 高级的语言特性同事保持与 Java 的高度集成

面向对象编程

面向对象编程是一种自顶向下的程序设计方法,将代码以名词(对象)作切割,每一个对象有某种形式的标识符(self/this)、行为(方法)和状态 (成员变量)。识别出名词而且定义出它们的行为后,再定义出名词之间的交互。实现交互时,必须将这些交互放在其中一个对象中(而不能独立存在)。现代面向 对象设计倾向于定义出”服务类“,将操做多个领域对象的方法集合放在里面。这些服务类虽然也是对象,但一般不具备独立状态,也没有与它们所操做的对象无关 的独立行为。 编程

函数式编程

函数式编程方法经过组合和应用函数来构造软件。函数式编程一般倾向于将软件分解为其须要执行的行为或操做,并且一般采用自底向上的方法。函数式编 程:对不可变性的强调有助于编写并发程序,视图将反作用推迟到尽量晚,提供了很是强大的对事物进行抽象和组合的能力。消除反作用使得对程序进行推理 (reasoning)变得容易。 并发

对比: 函数式编程

面向对象编程 函数式编程
对象的组合(名词) 函数的组合(动词)
封装有状态的交互 推迟反作用
迭代算法 递归算法
命令流 延迟计算
模式匹配

协变,Convariance,+T or ? extends T:类型能够强制转换为子孙类;
逆变,Contravariance,-T or ? super T:类型能够强制转换为祖先类;
不变,Invariance :类型彻底不能被强制转换。 函数

函数式编程的精髓在于尽量地推迟反作用。 性能

Scala 作了如下几个设计决策来提升代码表达力: 优化

  • 把类型标注(type annotation)换到变量右边;
  • 类型推断;
  • 可扩展的语法;
  • 用户自定义的隐式转换。

操做符(operation notation)是 Scala 的一个能力,能够把方法看成操做符。无参数的方法能够用做后缀操做符,只有一个参数的方法能够看成中缀操做符;方法名的最后一个字符若是是冒号 ”:“,则方法的调用方向反转。 this

在定义匿名函数时(又称 lambda),Scala 提供了占位符语法。能够用 “_” 关键字做为函数参数的占位符。若是使用多个占位符,每一个相应位置的占位符对应于相应位置的参数。 spa

用好隐式转换是操纵 Scala 类型系统的关键。隐式转换的基础应用场景是按需自动地把一种类型转换为另外一种,但它也能够用于有限形式的编译时元编程。要使用隐式转换必须把它关联到某个做用域,能够经过伴生对象或明确导入来作关联。

HotSpot

HotSpot 编译器的优化技术:

  • 方法内联(method inlining):HotSpot 可以判断是否能在调用点直接把被调用的小方法的内容嵌入进去。
  • 栈替换(On Stack Replacement):指 HotSpot 可以判断一个变量应该放在栈里仍是堆里。
  • 逃逸分析(Escape Analysis):HotSpot 分析各类东西是否逸出了特定做用于,这项技术主要用来在同步方法调用限定于某个做用域时减小锁开销。
  • 动态去优化(Dynamic De-optimization):是 HotSpot 的一个关键特性,它有能力判断一个优化是否事实上没有提高性能,而后取消该优化,改用其余优化。


http://coderbee.net/index.php/scala/20150711/1262

相关文章
相关标签/搜索