コップ本第3版と第2版の差分をメモっとく。第11~20章
9/20に出版されたScalaスケーラブルプログラミング第3版を手元の第2版と読み比べして、差分をメモってく。
第11章 Scalaの階層構造
11.1 Scalaのクラス階層
[Old] Scalaのクラスは、ScalaObjectという特別なマーカーとなるトレイトも継承しているという点でJavaのクラスと異なる。
[New] scala.ScalaObjectがなくなった。(2.10からなくなってた)
11.4 独自の値クラスの定義
節が追加された。
値クラスにできるクラスの条件
- パタメータがちょうど1つ
- 内容はdefだけ
- 他のクラスは値クラスを拡張できない
- 値クラスは、
equalsやhashCodeを再定義できない
class Dollars(val amount: Int) extends AnyVal {
override def toString() = "$" + amount
}
> val money = new Dollars(1000)
money: Dollars = $1000
第12章 トレイト
なし
第13章
なし
第14章 アサーションとテスト
14.1 アサーション
アサーションをコンパイル時に有効・無効化する方法が変わった。
- 第2版 : JVMの
-eaと-daオプション - 第3版 : scalacコマンドに
-Xdisable-assertionsオプションを指定して無効化
ScalaTestの使い方についての説明が更新された。
14.3 情報が豊富なエラーレポート
expectがassertResultに。
interceptがassertThrowに。
例外の内容をもっと詳しく知りたいときには、assertThrowsではなくinterceptを使う。
(第2版)14.4 JUnitとTestNGの使い方
無くなった
14.4 仕様としてのテスト
ScalaTestの説明がバージョンアップに追随。 specsの説明がspecs2に。
14.5 プロパティベーステスト
ScalaCheckの説明がバージョンに追随。
第15章 ケースクラスとパターンマッチ
15.1.3 matchとswitchの違い
match式は、 式の評価時に例外が投じられなければ、 必ず値を返す。
15.2.7.1 型消去(type erasure)
scalaインタープリターの-uncheckedオプションの説明が無くなった。
15.2.8 変数の束縛
expr match {
case UnOp("abs", e @ UnOp("abs", _)) => e
}
変数束縛パターン(variable-binding pattern)で、値を束縛した場合、eとexprは同じ値を持つが、絶対値演算は1つ少なくなる。
という捕捉が追加された。
第16章 リストの操作
16.6.2 分割統治原則
???についての注釈が追加された。
第17章 コレクションの使い方
なし
第18章 ミュータブルオブジェクト
章名が、ステートフルオブジェクト => ミュータブルオブジェクトに変更。
第19章 型のパラメーター化
なし
第20章 抽象メンバー
20.8 リファインメント型
節名が、構造的サブ型 から リファインメント型 に変更された。
9.4節のローンパターンのサンプルを一般化する場合についての説明以降が省略された。
Link
Latest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型
