この本は Java の言語とライブラリを効果的に利用するための手引きについて書かれています。 全部で 90 の項目があり、それぞれで一つのルールが示されています。
この本では最近の Java の特徴についてもカバーしています。
Feature | Items | Release |
---|---|---|
Lambdas | Item 42-44 | Java 8 |
Streams | Item 45-48 | Java 8 |
Optionals | Item 55 | Java 8 |
Default methods in interfaces | Item 21 | Java 8 |
try-with-resources | Item 9 | Java 7 |
@SafeVarargs | Item 32 | Java 7 |
Modules | Item 15 | Java 9 |
この本の規則は、明瞭性(clarity)と簡潔性(simplicity)という原則から導かれています。あらゆる再利用可能なコンポーネント(モジュール)は、その挙動でモジュールの利用者を驚かせてはいけませんし、その規模は小さくあるべきです。また、コードはコピーされないで再利用されるべきです。
エラーはなるべく早い段階で検知できるようにし、実行時ではなく、コンパイラ段階で検知できるように努めるべきです。
この本で提示される規則は常に守らなければならないわけではないですが、まずは規則を学び、ときにそれを破るという姿勢をもつべきです(守破離)。
明瞭で、正しく、再利用可能で、強固で、柔軟性があるようにコードを書いていれば、たいていの場合、必要なパフォーマンスが得られます。 そうしておけばパフォーマンスが本当に必要になったとき、簡単にそれを得ることができるでしょう。
Java の構成要素
Java には4種類の型があります。
- interfaces(annotations を含む)
- classes(enums を含む)
- arrays
- primitives
最初の3種類は reference types として知られています。また、class instance と array は objects と呼ばれます。
クラスは次の要素を持っています。
- fields
- methods
- member classes
- member interfaces
メソッドシグネチャは次の要素で構成されます。
- name
- the types of its formal parameter
メソッドの戻り値の型が含まれないことに注意してください。
用語
この本では『Java 言語仕様』とは異なる用語の使い方をしているケースがあります。 ただし、大抵のケースはそのまま理解できるものでしょう。
例えば、この本では「サブクラス化(subclassing)」を「継承(inheritance)」と書く場合があります。
API
この本において API とは次の要素を示しています。
- classes
- interfaces
- constructors
- members
- serialized forms
プログラマはこれらを通して各種モジュールアクセスするためです。 これらの要素が Javadoc で標準出力されるのは、偶然ではなく意図的にそうなっています。
API を利用するプログラマをユーザーと呼び、API を利用するクラスをクライアントと呼びます。
Java 9 では module system が導入されています。 ライブラリが module system を使っている場合、module で宣言されたパッケージが公開 API となります。
感想
Effective Java 3rd を読むついでに、第二版(日本語)向けに書いた記事をアップデートしてみることにした。
最初に Effective Java の記事書いたのもう2年半前。 読み返してみるとやっぱり間違ってるところあるし、こういう記事書いておいてなんだけど、本気の人はちゃんと本で読んだ方がいいですよ・・・(そして僕に間違いを教えてください)

- 作者: Joshua Bloch
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2017/12/18
- メディア: Kindle版
- この商品を含むブログ (1件) を見る