#EffectiveJava独書会まとめ その1

一回読み終わったので。次は自分なりに消化したく。まとめてみる。

前提

Effective Javaは主に「APIやライブラリを作って保守する人」の目線で書かれている。
でも、僕自身はそんなAPIやライブラリを使って「アプリを作って保守する人」なので。
そっちの目線で見てみたいなーと思うん。

例えば、publicフィールドも別にいいと思うし。
publicメソッドを公開しても、永遠に変えられない、ってことじゃないし。
そういう目線で読みなおしてみようかなと。

順番

本の順番とは関係なく、好きなのから適当にピックアップしていこっと。

その1

項目65 例外を無視しない

catch(Exception ex) {
}

とかしないの。ってことで。仕様的に無視していいってことならなんかコメント書いとく。

あ、でも、closeが投げるIOExceptionはキャッチして捨てることが多いけど
そいうときはcommonsのcloseQuietlyでやっちゃったり。

ってtry-with-resourcesが気になって見てみた。
try-with-resources 文
ってこのへんいろふさんが書いてたな。Java7 体当たり/try-with-resources Statement - 日々常々

ってcloseQuietlyがなんとなく気になってぐぐった。
ほほー。たしかにたしかに。理解せずに書く人がいると危ないね。
Java: closeQuietly considered harmful - sardineの日記

項目57 例外的状態にだけ例外を使用する

例外を通常の制御フローに使うなよってことで。

項目60 標準例外を使用する

NPEとかIAEとかISEとか。(あぁ、EclipseだったらこれでCtrl+Spaceで出てくるのに...#言い訳)
使おうねってことで。主にメソッドの事前条件チェック的な。

事前条件チェックは、SpringのAssertクラスが好きかな。
あと、ThymeleafのAssertのクラスも綺麗だった気がするな。

項目63 詳細メッセージにエラー記録情報を含める

何も書いてないと、何が悪かったんやー!!ってなるよね。
ちゃんと、例外が発生した時にその状況が分かるようにしといてよね。ってことで。

項目48 正確な答えが必要ならば、 float と double を避ける

丸め誤差があるので、お金の計算とかをfloat,doubleでやっちゃだめだよ!BigDecimal使う。
ってか、BigDecimalがもちょっと楽に使えたらいいなぁ。

項目51 文字列結合のパフォーマンスに用心する

"+"で結合するとインスタンスのコピーが作られるからパフォーマンス良くないよ。
特にループの中で使うと影響でかいよ。
そんなときはStringBuilderでつないで最後にtoStringしようね。

項目49 ボクシングされた基本データより基本データ型を選ぶ

基本データ型を選ぶってより、オートボクシング気をつけて!ッて感じ。

  • オブジェクト同士の比較にならないようにね。
  • NPE発生しないようにね
  • ボクシングしすぎてパフォーマンス悪くならないようにね

確か、Thymeleafのプロジェクトにはオートボクシング禁止ってルールあったな。

項目50 他の型が適切な場所では、文字列を避ける

文字列でenumを表現したりbooleanや数字を表現したりせんのやで!

来週

はGebの社内勉強会の資料作りとか準備しようと思うので。
それが終わったら、またまとめていけたらいいな。