The King's Museum

ソフトウェアエンジニアのブログ。

【Effective Java 3rd Edition】Chapter 1: Introduction

この本は 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年半前。 読み返してみるとやっぱり間違ってるところあるし、こういう記事書いておいてなんだけど、本気の人はちゃんと本で読んだ方がいいですよ・・・(そして僕に間違いを教えてください)

Effective Java

Effective Java

(c) The King's Museum