コップ本第3版
- コップ本第3版と第2版の差分をメモっとく。第11~20章 (24 Oct 2016 | Tags:
コップ本第3版と第2版の差分をメモっとく。第11~20章 )コップ本第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節のローンパターンのサンプルを一般化する場合についての説明以降が省略された。
LinkLatest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型
Recent Books:
- コップ本第3版と第2版の差分をメモっとく。第1~10章 (24 Sep 2016 | Tags:
コップ本第3版と第2版の差分をメモっとく。第1~10章 )コップ本第3版と第2版の差分をメモっとく。第1~10章
9/20にScalaスケーラブルプログラミングの第3版が出版されて、しかも第3版から電子書籍にも対応したので、早速入手した。
せっかくなんで、手元の第2版と読み比べして、差分をメモってく。
第01章 スケーラブルな言語
なし
第02章 Scalaプログラミングの第一歩
なし
第03章 Scalaプログラミングの次の一歩
なし
第04章 クラスとオブジェクト
4.2 クラス、フィールド、メソッド
結果型の省略に関して、クラス内で宣言されたpublicメソッドの結果型を明示的に提示することが適切な方法、と紹介されている。
4.5 Appトレイト
scala.Applicationトレイトは、コマンドライン引数を使えなかったが、scala.Appトレイトはargsという名前の文字列の配列を指定しておけば、コマンドライン引数にアクセスできる。こんな感じ
object Sample extends App { for(arg <- args) { println(s"arg: $arg") } }scala Sample hoge fuga > arg: hoge > arg: fuga第05章 基本型と演算子
5.1 基本型
Javaのプリミティブ型に対応するScalaのvalue typeで、小文字の別名についての言及がなくなった。
2.8では、↓と書いても自動的にScalaのvalue typeと同じように扱われていたらしい。
val i:int = 1 val f:float = 1f val d:double = 1d2.11だとコンパイルエラーになる。
5.2 リテラル
Javaプログラマーのための近道で、読んでおいた方がよいScalaのリテラルに、文字列補間(5.3節)が追加された。 8進数の整数リテラルをサポートしていない記載が追加された。(コードサンプルも追随している)
5.3 文字列補間
5.3節 文字列補間 が追加された。
s文字列補間子
val name = "reader" println(s"Hello, $name!") > Hello, reader!raw補間子
s補間子と同様に扱えるが、文字列リテラルのエスケープシーケンスを認識しない。
println(raw"No\\\\escape!") > No\\\\escape!ちなみにs補間子だと、
println(s"No\\\\escape!") > No\\escape!f補間子
対象の式に出力書式を指定することができる。指定する場合は、対象の式に続いてパーセント記号(%)と書式指定の構文(
java.util.Formatterで定義されていりもの)を記述する。f"${math.Pi}%.5f" > res0: String = 3.14159出力書式の構文が指定されていない場合、デフォルトでは%sと認識され
toString値が代入される。5.6 関係演算子と論理演算子
def salt:Boolean = { println("salt"); false } def pepper:Boolean = { println("pepper"); true } salt&&pepper > salt > res0: Boolean = falseこの場合、
saltがtrueなら、pepperが呼び出されることはない。どうしても、式の右辺(この場合
pepper)を評価したいのなら、代わりに&や|を使う。salt&&pepper > salt > pepper > res0: Boolean = false第06章 関数型スタイルのオブジェクト
なし
第07章 組み込みの制御構造
なし
7.4.3 finally節
try-catch-finallyの括弧の有無について注意書きが追加された。
※ catch節では、case文を必ず括弧で囲まなければならない。しかし、try節とfinally節では、式を1つだけ含む場合は括弧で囲む必要はない。 例えば、次のようにも記述できる。
try t() catch { case e: Exception => ... } finally f()第08章 関数とクロージャー
なし
第09章 制御の抽象化
なし
第10章 合成と継承
なし
Latest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型
Recent Books:
