「Java ルールブック ~ 読みやすく効率的なコードの原則」を読んで
Java のコーディング規約的なものを扱っていて、
かつ、初心者でもとっつきやすい本はないか、ということで。
「Java ルールブック ~ 読みやすく効率的なコードの原則」という本を
読んでみました。
- 作者: 大谷晋平,米林正明,片山暁雄,横田健彦,電通国際情報サービス
- 出版社/メーカー: 技術評論社
- 発売日: 2011/02/15
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 163回
- この商品を含むブログ (20件) を見る
全体的な印象
- 短い時間でさらっと読める
- (知ってる内容が結構あったのも大きいかもだけど)通勤 1 往復程度で読了
- ルールに対する違反例と修正例がサンプルコードとして載っていて分かりやすい
- 対比できるのがいい!
- 全体的に文字もじしすぎてなくて初心者でも手に取りやすい
- 特にサンプルコードの文字が大きめで説明に埋もれてしまわない
- 全体的に見やすい!
- 範囲が多岐に渡る(文法やクラス継承、マルチスレッドなど)
- 一通りやったことがある人向け?
細かいところとしては「いいね!」って素直に思える部分と
初版が 2011 年でちょっと古いせいもあるのか、
「モヤッと」疑心暗鬼な部分があったので、
とりあえず、メモしておきます。
( 「モヤッと」については実際のところどうなのか、細かく調査していきたい。。
いいね! なところ
- 符号の向きは左向き("<"、"<=")にする
- 意識してやったことはないですが、こういうルールは個人的に好きです
- java.lang パッケージはインポートしない
- 正直に言うと、これ知りませんでした。。
- なんで java.lang だけ特別なのか、気になりますが。
- 戻り値が配列や Collection の場合、null を返さない
- 意識が甘いときがあったかも、と不安になったので戒めとして。
- 文字列の連結には StringBuilde クラスを利用する
- これ、(確か)「パーフェクト Java」でも見た気が。。
- システム依存記号(\n、\r など)は使用しない
- 必要に迫られなかったとはいえ、目から鱗
- System.getProperty() 。。覚えておこう。
- 誤差なく計算したいときは、BigDecimal クラスを使う
- 金額計算とか使ってた理由が今さら分かった。。
- 補助文字を使用する場合は、String#length() と String#charAt() を使わない
- 必要に迫られなかったとはいえ、補助文字は扱ったことあるので覚書として。
- Cloneable#clone() を使わず、自前のコピーメソッドを利用する
- シャローコピーとディープコピーのお話
- キャスト処理は instanceof で囲む
- 囲むのを徹底して意識できてなかったと思う。。これも戒め
- 車輪の再発明をしない
- ルールじゃなくて、(コラム的な)MEMO から抜粋
- ロギングライブラリを使おう
- これも MEMO から抜粋
- つい標準入出力使っちゃうところがあるので戒め。。
- wait()、notify()、notifyAll() は syncronized ブロックの中で利用する
- 苦手なマルチスレッド。。自分への覚書です。
- wait() メソッドの後で前提条件を再確認する
- wait() する条件は if 文じゃなく、while 文にする
- 処理の待ち合わせにはポーリングループを利用せずに CountDownLatch などの既存の仕組みを利用する
- CountDownLatch を知らなかったので、備忘録として残しときます
- マルチスレッド環境下では ConcurrentHashMap や CopyOnWriteArrayList を使う
- これも使ったことが(おそらく)ないので、備忘録として残しときます
モヤッと、なところ
- インタフェース名と実装クラス名の対応関係を明確にする
- XXX インタフェースの実装クラスは XXXImpl にする、というやつ
- インタフェースと実装クラスが 1 対 1 じゃない場合はどうなの?と思ったので。。
- 条件分岐では、「!」を使わない
- わりと良く使ってました。。一般的にはどうなのか、ちょっと知りたい。
- Date、Calendar の代わりに long の利用を検討する
- もやっと、というよりは Java SE 8 とあわせて見直したい
- 時間の単位変換には TimeUnit を使う
- これも 1 つ上と同様に Java SE 8 とあわせて見直したい
- static インポートは利用するかどうかを統一する
- 過去に統一できてなかった思い出が。。
- もやっと、というよりはどちらが一般的なのか気になる。
- Java 2 以降のコレクションクラスを利用する
- Vector とか使ってないけど、なぜダメなのかを深堀したい
- wait() メソッドの後で前提条件を再確認する
- 「スプリアスウェイクアップ」をさらっと調べてみたけど、有用な情報が得られなかった。。