“Java by Comparison; Become a Java Craftsman in 70 Examples”は素晴らしい本だ。一文で表現するならば – より優れた明確なJavaコードの書き方を教えてくれる。
対象とする読者は?
私が気に入っているのは、著者がこの本の読者に対して、15分未満でFizz Buzzをコードできることを期待している点である。単にプログラミングの知識を読者に求めるよりも、はるかに具体的だ。
多様な読者をカバーするために、著者は巧みにバランスを取っている。本書が役に立つのは、次のような読者だ。
- 新人開発者 – 例題の大部分は、基礎を知っているプログラマであれば容易に理解できるものだ。新人プログラマが知らない可能性のあるAPIを使う場合も、改良バージョンの方が優れている理由が明確にされている。
- 他言語から転向した新しいJava開発者 – 例題では、共通的なイディオムを重視している。このことは、他言語からの知識をマッピングするだけでなく、他言語のイディオムを持ち込んでいる場合に、それを認識する上でも役に立つ。
- 中堅Java開発者 – 大部分の例題は、よりよいコードを書きたいと思う開発者にとっても有効である。各例題は独立しているので、すでに知っているものは飛ばして、他の部分に直接行くことも可能だ。JUnit 5とJava 8のベストプラクティスを明快かつ簡潔に学習する上でも役に立つ。
- ベテラン開発者 – 自分の知っていることを誰もが知っている訳ではない、ということを忘れがちだ。チームの全員が簡単に理解できるコードを書くことを忘れないために、本書は優れた方法である。コードレビュー中にチームメイトに示すために持っておくのも便利だ。結局のところ、これまでも十分に理解はできていたが、きれいなコードに書き上げられなかったものが本書の例題なのだ!
書籍の体裁は?
本書の大部分では、紙の書籍でも2ページビューのeブックリーダでも便利な2ページフォーマットを使用している。画面が2ページを見るために十分な大きさであることを確認しておこう。本書をKindleで読むと、かなりのフラストレーションを経験することになりそうだ。
本書の2ページ形式は、他の出版社で見られるものとは違い、コードを比較するようにデザインされている。左上のページには“変更前”のコードが、右上には改良後のコードがある。比較に便利なフォーマットであると同時に、改良後のコードが短く、クリーンになっていることもよく分かる。
コードスニペット内の重要な違いは強調表示されているはずだ。ただし、プリントアウト時の強調表示はミディアムグレー(明るいグレーの背景色)で表される。これに対して、Javaのキーワードは黒太字で、その他は黒字である。
私にとってこの配色は、キーワードを“無視(tune ont)”して、グレーのテキストに意識を集中するという努力を必要とするものだった。慣れるために数ページが必要だったが、大きな問題ではなかった。緑色の説明もあったので、e-bookのユーザにはカラー表示が必要だろう。少なくともプリントアウトは単一色なので、色覚に問題のある読者でも問題はないはずだ。
両ページの残り部分と最後には、コードの差異とそれらが重要である理由、その他さまざまなポインタが説明されている。こちらの形式にも不自然な部分がある。テキストセクション内で使用されているコードに、他のテキストよりも幅の狭いフォントが使用されているのだ。私が慣れているものとは逆である。いくつかの例では、ヌルポインタを回避する方法など、おまけのヒントも含まれている。
対象とするJavaのバージョンは?
本書はおもにJava 8を対象としており、ラムダやストリームやオプショナルの優れた例題がある。私はCollectionクラスにfrequencyメソッドのあることを本書で知った。これで自分のコードをもっと短くできるのは間違いない!
Java 9のAPIにも数多く言及されており、興味深い。ヒントのひとつには、Java 9のモジュールの文書化に関する示唆があった。全体として、長期にわたって本書を現在の状態に保つならば、Java 8が論理的な選択だ。Java 9/10/11で導入されたAPIについては、本書で使用されている例題の範囲内では用いられていない。
取り上げた例題については?
コード例ではさまざまなトピックをカバーしている。その多くは、短くて読みやすいコードを書くためのリファクタリングだ。金額計算にはBigDecimalを使用しない、というような機能的なものもある(ありがとう)!JUnit 5のパラメタライズドテストもとても参考になる。適切なコメントを書くためのテンプレートを提供してくれるヒントも気に入っている。
本書はすべてが例題なのか?
ほぼその通り。最初の8章では70の例を掲載しており、9章と最後の章では、その他の優れた開発プラクティスを取り上げている。JenkinsとSonarQubeが取り上げられているのは特筆に値する。Given(Java用のBDDライブラリ)やjunit-quickcheck(プロパティベースのテスト)などのライブラリへの言及も役に立った。
最後に、静的分析ルールを適用する場合には、実際に人が見て判断することが重要である、という指摘があることは素晴らしい。
全体的な印象
本書を読んで楽しめたので、間違いなく推奨できる。短く興味深い例題を使って、読みやすいスタイルで書かれた本だ。本書が幅広いスキルを対象としていることを表紙で見た時には、本当のところは懐疑的だった。しかし、それは事実だった – 初心者以上であれば、本書は必ず役に立つ。ぜひご一読を!
この記事を評価
- 編集者評
- 編集長アクション