Javaのプログラムを書いているとき、「これはベストな書き方なのか?」という疑問は常にあると思います。ネットで調べる、レビューを受けるといった、確認方法はいくつかあると思いますが、その一つが本書になると思います。
Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで
- 作者: 谷本心,阪本雄一郎,岡田拓也,秋葉誠,村田賢一郎,アクロクエストテクノロジー株式会社
- 出版社/メーカー: 技術評論社
- 発売日: 2017/04/18
- メディア: 大型本
- この商品を含むブログを見る
表紙の情報量が非常に多いのが特徴です。
対象読者層
「はじめに」に書いてあるのでほぼ合っていると思います。
オススメな人
Javaをある程度お仕事で書いてきた
体系的に学びなおしたい
お仕事で書いてきたというのは、実際に稼働するコードを書いた。また、他人の書いたコードを読んだり直したりしたことがある、という意味です。
向かない人
プログラミング経験がほとんどない人
特徴
トピックは多岐にわたりますが、全般的にめちゃくちゃ絞り込んであります。「本格入門」であって入門書ではないので、ある程度文法を分かっている前提で進みます。
また、筆者のこれまでの経験を生かして、「結局どうすればいいか」が書いてあります。
例えば、インタフェースのデフォルト実装をとりあげます。
抽象クラスとどのように使い分けるのかという疑問について、「インタフェースのデフォルト実装は基本的に使わなくてよい」と簡潔に答えています。
理由としては、
という、Javaの歴史を感じるものになっています。納得感のある説明になっていると思います。
デザインパターン
GoFのデザインパターンは23種類もあって身に着けるのが大変ですが、本書では9つに絞って紹介しています。
結城『デザインパターン入門』に比べると、書中ですべてのコードを載せているわけではありませんが、実際に使いそうな例になっています。
Abstract Factoryパターンでの呼び出し側のコードは以下の通りです。
public class SampleMain { public static void main(String... args) { String env = "PostgreSQL"; Factory factory = createFactory(env); Connection connection = factory.getConnection(); Configuration configuration = factory.getConfiguration(); } private static Factory createFactory(String env) { switch(env) { case "PostgreSQL": return new PostgreSQLFactory(); case "MySQL": return new MySQLFactory(); default: throw new IllegalArgumentException(env); } } }
ただ、個別のパターンの解説の詳しさは、結城本のほうが上回っています。例えば、このパターンでは「工場」を増やすのは簡単です。OracleFactoryは既存の実装に影響を与えずに追加できます。一方、新しい「部品」、HogeSettingsを追加しようとすると、すべての既存の「工場」に影響が出てしまうので大変です。そのような説明が結城本に記載されています。
本書でも記載はありますが、個人的には結城本を読んで初めてちゃんと理解できた印象です。「わかっている人にはこれくらいの説明で十分」という感覚ですかね。
記載のないもの
後半で、デザインパターンや各種ライブラリの説明がありますが、基本的には各クラス内で、どのように書くべきかという説明が中心になっています。設計的な話はあまりないのかな*2という印象です。
まとめ
ブログタイトルに「濃縮する」と書いた通り、コンパクトに必要な記載を詰め込んでいるのが本書の良いところだと思います。
余談ですが、私は6年くらい前に筆者たちが所属するアクロクエストテクノロジー株式会社に1日インターンに行ったことがあります。当時は1ミリもプログラムを書いたことがなかったはずなのになんで行ったのか全く覚えていませんが、こういった形でまた巡り合うことになるとは、不思議な縁を感じます。