Scala スケーラブルプログラミング

昨日はあまり進まなかったのですが、今日はがっつり進めています。ようやく7章まで読み終わりました。

ここまで読んだ感想としては、見た目ほどScalaは怖くないですね。どちらかというとC#でLinqをごりごり書いている人やRubyが好きな人にはなじみやすいのではと思います。 (私は主にC#でLinqは得意というほどではないですが好きです。RubyはRailsをちょっとできるようになったくらいでJavaは中途半端なスキルなのですが、今のところこの書籍で詰まるところはないです。)

で、以下Evernoteにメモした内容を抜粋してみます。

2.2 変数を定義する

val:Javaのfinalに似た定義で変数の初期化後に別の値を代入できない。 var:Javaのfinal以外に似た定義で変数の初期化後に別の値を代入できる。

3.4 集合とマップを使う

scalaでは基本的にimmutabileなトレイトがインポートされているため、mutableなトレイトはインポートする必要がある。 ※トレイトはJavaのインターフェースのようなものらしい

3.5 関数型のスタイルを見分ける

役に立つプログラムというものは、どれも何らかの形で副作用を持つことになるだろう。そうでなければ、プログラムの外の世界に値を提供できなくなってしまう。

4 クラスとオブジェクト

クラスとともに宣言されたobject:コンパニオンオブジェクト (同一名称のクラスと同じファイルに宣言する)

objectだけ宣言したもの:スタンドアロンオブジェクト (シングルトンオブジェクトでstaticメソッドを定義するイメージ)

5.2.4 文字列リテラル

raw stringsはヒアドキュメントと同じようなものか。

6.7 補助コンストラクター

これはコンストラクタのオーバーロードを行い、必ずクラス宣言に定義したコンストラクタをコールするようなイメージ。

7.2 whileループ

whileとdo-whileは、式ではなく「ループ」と呼ばれるが、それはこれらの式からは意味のある結果値が得られないからである。結果値の方はUnitであり、Unit値は1つしかなく()で表現される。

7.3.2 フィルタリング

for式にはフィルターを追加できる。

[sourcecode language="scala"] for(file <- filesHere if file.getName.endWith(".scala")) println(file) [/sourcecode]

7.4.4 値の生成

通常はfinally節から値を返すのは避けた方がよい。finally節はオープンファイルのクローズなど、何らかの副作用を必ず発生させる手段と考えるべきである。

7.6 breakとcontinueを使わずに済ませる

breakは使用しない方がよい。

Scalaスケーラブルプログラミング(通称コップ本)は700ページほどあるので先は長いですが、基本的なところだけを押さえるならもう少しで何とかなりそうです(ーー;)