コップ本第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型