
Effective Java 第2版 (The Java Series)
- 作者: Joshua Bloch,柴田芳樹
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2008/11/27
- メディア: 単行本(ソフトカバー)
- 購入: 77人 クリック: 936回
- この商品を含むブログ (266件) を見る
まえからこれ書きたくて、いざ書こうとして調べだしたら既に英語で似たようなものあった(´・ω・`)
だがしかし、参考にしつつ、あえて自らの視点で(?)書いてみますよ(`・ω・´) *1
で、そもそも元の本かなり有名で、本気で全部比較していって書いたら、普通に本が一冊出来上がっちゃうと思うので、まずは、比較的簡単でわかりやすいところを挙げてみます。
3 privateのコンストラクタかenum型でシングルトン特性を強制する
Scalaにはobjectっていう、シングルトン専用の構文あるし。それをJavaコードに訳すとどうなるのか?については、このへんが詳しいのでオヌヌメですぉ
8 equals をオーバーライドする時は一般規約に従う
9 equals をオーバーライドする時は、常にhashCodeをオーバーライドする
10 toStringを常にオーバーライドする
74 Serializableを注意して実装する
case class で、なおかつ、フィールドをimmutableな型*2にすれば、これ全部簡単に満たせるよ!case classにすれば、このへんはコンパイラさんが自動で生成してくれるわけです。まえに自分がcase classについて説明したもの
14 publicのクラスでは、publicのフィールドではなく、アクセッサーメソッドを使う
Scalaでは、publicのフィールド自体が、原理的に作れません!必ず自動でアクセッサが生成されます!
15 可変性を最小限にする
色々な点からScalaでは、可変性( 状態を持つこと )をそもそも簡単にすくなくできる仕組みがあるというか、不変な、状態を持たないClassを書きやすい。
たとえば、
- デフォルトで名前空間に入っている、Map、List、Setなどがimmutable
- Javaに比べて、コレクションクラスがimmutableなものが標準ライブラリに沢山ある
- メソッドの引数が、デフォルトでJavaでfinalが付いているのと同じ
- immutableな変数が短く書きやすい
Javaの場合
final String scalachan = "Scalaちゃん";
Scalaの場合
val scalachan = "Scalaちゃん"
細かいけれど、(型推論もあるおかげで) 上記の例の場合、Javaの場合と同じことをしているのにもかかわらず、10文字*3少なく書けますね。
36 常にOverride アノテーションを使用する
アノテーションではなく、そもそもoverrideってキーワードがあって、overrideしたのに付けてなかったらコンパイルエラーですから
46 従来のforループよりfor-eachループを選ぶ
そもそも「従来のforループ」っていう、
for(int i = 0 ; i < 10 ; i ++ ){ }
というしくみのループ自体がScalaには存在しません!
他にもあるでしょうが、とりあえずわかりやすいのはこのくらいでしょうか。また気が向いたら、他の項目も書くかもしれないし、書かないかもしれない(´・ω・`)