理系学生日記

おまえはいつまで学生気分なのか

Java プログラマーなら習得しておきたい Java SE 8 実践プログラミング

Java プログラマーなら習得しておきたい Java SE 8 実践プログラミングを読みました。タイトル長いな。

どの言語でもそうですが、特に Java という言語は、その言語仕様とクソのように多い API の使い方をどれだけ知っているかによって、その開発効率が大きく変わってくる言語だと思っています。
そういう意味で、ぼくはこれまでJava (SE) 8 は使っていたものの、全体としては Stream とかラムダくらいしか Java SE 8 の新機能を使っていなくて、かつ、他に新機能ってあったっけ?っていう感じでした。
この本は、そういう

  • Java については一通り開発経験があるものの
  • Java 8 の新機能に関する全体像が曖昧

という、なんとなく動くものは作れるが Java 8 的にそれがベストなのかが分からない、というタイプの人間にはハマってくれる本でした。

一般に Java で言語仕様に関する本というと、

くらいの厚さで嫌になったりするのですが、300 ページにも満たないページ数で要点がきれいにまとめられているところも嬉しい。


まえがきにもありますが、

この本は、「短気な (impatient)」スタイルで書かれています。そのスタイルは、書籍「Scala for the Impatient」で私が最初に採用したものです。
その本では、あるパラダイムが他のパラダイムよりも優れていることについて読者に講義するのではなく、手短に要点を説明したかったのです。必要なときにいつでもすばやく参照できるように、小さな単位で技術情報を解説しました。

というように、

  1. Java 8 で何が導入されたのか
  2. それはどういうユースケースで使われるのか

というような内容が、個々の機能について例題とサンプルコードとともにに記述されていて、タイトルの「実践」に嘘偽りのない本です。本当に簡潔で良かった。Java 6 → Java 7 が大した進化が無かった (ようにぼくには見える) のに対し、Java 7 から Java 8 は非常に多くの機能が追加されていて、コードを書くときもかなりパラダイムを変えざるを得ない*1のだけれど、この本を読んどけば最低限そういうパラダイムに追随できるのではないかと思います。

書いてあること

最初はラムダ式から始まります。ラムダ式とは何なのか、そして、そのラムダ式を Java という後方互換性を重視するプログラミング言語でどう実現しているのかを説明した上で、そのラムダ式が大活躍する Stream API に話が進んでいきます。Stream API も、個々の API については簡潔に、それでいて、どういうときにどうやって使うのかが綺麗に説明されています。
その後、関数型としてのラムダと言えば良いのか、遅延実行から関数の合成、並列化といった具合に話が進みます。ここまでは、どういう使い方であれ Java を使った開発を行う人であれば理解していて損はない、というか理解していないと今後つらいだろうと思われるような内容が続きます。
書いてあることもそうですが、機能の説明順も随分と心を砕いたんじゃないかと思えるくらいに気が効いてます。

ぼく自身は JavaFX には興味がないので読み飛ばしましたが、本当に使いづらかった日付系 API を改善した Date and Time API や、非同期処理のネストを大きく改善する Completable Future、Files/Paths といったユーティリティと、なかなか理解していなかった/存在を知らなかった機能が山積みでした。
それぞれについては、ぼちぼちエントリにまとめていければと思うのですが、とりあえず本当に良い本だったということで。

*1:決して悪い意味ではなく、むしろコードを書くのが楽しくなるような変化だと思う