コップ本第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 = 1d
2.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型