総評:★★☆☆☆ 難しさがヤバイ。
面白い度:★★☆☆☆ 部分による。
読みやすい度:★☆☆☆☆ 普通。
ためになる度:★★★★☆ Javaプログラマにはタメになると思う。
また読みたい度:★★★★☆ Javaの実装をするときにはまた見たいと思う。
面白い度:★★☆☆☆ 部分による。
読みやすい度:★☆☆☆☆ 普通。
ためになる度:★★★★☆ Javaプログラマにはタメになると思う。
また読みたい度:★★★★☆ Javaの実装をするときにはまた見たいと思う。
現在SEでプログラムもしているのだが、Javaのプログラマーとして見ておいた方がいい本というので、1年くらい前に買っておいて今になって読んだ。
Javaは結構難しい部類の言語だと思っていて、Javaの作りや継承やインターフェースやスレッドなど、用意された機能?の意味を理解するのも結構難しい。
5年以上やってはいるが、基本的なプログラムは読めるし書けるが、まだ理解しきっているとは思っていない。
そんなJavaのプログラマーのためにさらに深い専門的な知識やプログラムの書き方のセオリーなどが書かれた本だった。
書かれている意味を理解するのも難しく、また英語で書かれたものの翻訳なので、日本語として理解するのも難しかった。
一つ一つを理解するような考えではなく、流しで見て、こんな感じのことを言っているので的なことをつかむように見ていったが、やはり時間がかかったし、書かれている4割くらいの内容も理解できているとは思えなかった。
でも今までJavaのプログラムを見ていて、なんでこんな所にこんなメソッドがあるんだろうというような疑問や、このコードは何の意味があるんだろうと思っていたことがこの本を見てある程度理解できた。
そういう意味では見て良かったなと思っている。
一旦自分の中で理解した内容を備忘録のため書き出してみる。
・ファイナライザを作ることを避ける。 → なんかプログラムの処理の順序が崩れたり、パフォーマンスが落ちる原因になるらしい。
・equalsはクラスごとにオーバーライドが必要である。 → これはクラスによって同値関係が変わってくることがよくあるため、equalsメソッドをオーバーライドする必要があるということが分かった。
クラス同士で何がequalsなのか?ということをクラスを作った人が定義して書かなければいけないんだろうという理解だった。
・equalsメソッドをオーバーライドするときは常にhashCodeをオーバーライドする。 → これは良く分かっていないがお作法として理解した。
・toStringを常にオーバーライドする。 → これはデバッグログとかを出しやすくするために必要との認識。これをしないとメモリ参照の内容がデバッグログに出てきてしまうため。
・クラスとメンバーの公開を常に最小限にする。 → オブジェクト指向はカプセル可が重要な要素の一つなので、むやみにフィールドやメソッドはpublicにしてはいけないという理解。publicにする場合はメソッドの振る舞いや、どのように使われるべきかをしっかりJavaDocに書かなければいけないという責任が発生する認識を持つことが必要ということが分かった。
・int定数の代わりにenumを使用する。 → 定数を持つ場合はenumを検討するとよいらしい。自分はenumを使った実装はあまり見たことが無いが、ちょっとenumの実装を見つけたら今度注意深く見てみようと思った。
・booleanパラメータより2つの要素を持つenum型を使用する。 → これも上記と同様、enum型の使われ方を注意深く見てみようと思う。
・インターフェースでオブジェクトを参照する。 → これは重要。HashMap等を使う場合は型にMapを使用するようにするということ。これはしっかり意識していこうと思った。
・whileループよりforループを選ぶ。 → これは基本だが、しっかりforループを意識して使っていこうと思う。
・ボクシングされた基本データより基本データ型を選ぶ。 → ボクシングされた基本データというのは、IntegerやLongなどの基本データ型の型があるオブジェクトのことである。これはむやみにこれらのオブジェクトは使わないようにしていこうと思う。
・ライブラリーを知り、ライブラリーを使う。 → 「標準ライブラリーを使用することで、それを書いた専門家の知識と、それをあなたよりも前に使用した人々の経験を利用することになる。」と書いてある。確かにそうだ。
「すべてのプログラマは、java.lang、java.utilの内容とある程度java.ioの内容をよく知っているべきです。」これは忘れないようにしたいと思う。
ざっとこんな感じ。
あとはSerializableの使い方なども知ることができて良かったと思う。シリアライズを使えるようにするには、serial version UIDの記載が必要だということが分かった。
シリアライズできないようにするにはtransientをフィールドに付ける必要があるなど。
Serializableの辺りは本当に難しいが、以前実装で見たことがあったので、その必要性が今理解できたのだった。
そんなんで、今はJavaは使っていないが、今度Javaでコーディングする際などはまた立ち返ってこの本を開いてみたいと思う。
そんなんで今回は以上☆
※コメント投稿者のブログIDはブログ作成者のみに通知されます