mike-neckのブログ

Java or Groovy or Swift or Golang

【書評】Java SE8 実践プログラミング - 2章のみ

こんにちわ、みけです。

数々の技術書の翻訳で有名な柴田芳樹さんが

『Java SE8 実践プログラミング』

書評を募集していたので、応募しました。

現在の進捗はこんな感じですが、

  • 1章「ラムダ式とは」(未読)
  • 2章「ストリームAPIの使い方」(読了)
  • 3章「ラムダ式を使ったプログラミング」(途中)
  • 4章「JavaFXによるGUIプログラミング」(未読)
  • 5章「日付と時刻の新たなAPI」(未読)
  • 6章「並行処理の機能強化」(未読)
  • 7章「Nashorn JavaScriptエンジンの活用」(読了)
  • 8章「その他のJava8機能を理解する」(読了)
  • 9章「Java7の機能を復習する」(読了)

とりあえず、2章のみ文章をまとめておいたので、

記載しておきたいと思います。

また、全体的なものについては、後日改めてまとめておきたいと思います。


第二章感想

Java8で最も目玉機能である、Streamについて解説している章です。この章をひと通り読むと、Streamの概要をつかむことができるでしょう。

僕はこの本を読む前に大体わかっているつもりでしたが、いろいろと新しい発見があったように思います。

新たな発見

  1. StreamAutoCloseableの実装クラスであるということ
  2. collectメソッドによってCollectionに柔軟に収集可能であること

最初の事に関しては別のエントリー

に詳しく書いてあります。

詳しくは上記のエントリーに譲るとして、端的に書くと、ファイルIOでStreamを取得する場合には try-with-resourceで扱わないとリソースリークが発生する可能性があるということを覚えておいたほうがよいです。

2.については実際に読んで手を動かしてみると納得できると思います。

物足りなかったこと

  • Optionalについての解説がちょっとしかない

Optional自体はそれほど機能豊富なものではなく、null安全性を保証するだけの機能です。

しかし、Javaでのnullに対するプログラマー間の認識違いが多くのバグの温床になったり、 過剰に防衛的なプログラミングを生み出すなどJavaのコードを汚くする原因にもなっているなど、 Javanullプログラマーを悩ましてきたものです。

Optionalnullに毒されてきたJavaパラダイムシフトを促すものです。 したがって、いやというほどOptionalについてJavaプログラマーに叩きこむくらいの勢いを持って解説して欲しかったという、 思いがあります。

とはいえ、Cay S.Horstmannにも何か考えがあったのだと思うので、まあ、何かあるんでしょう(トートロジー)。

この章を読むときの注意

メモとかCAUTIONとかすごく小さく扱われている部分ですが、非常に重要な事が書いてあるので読み飛ばさないほうがよいです。

例えば、コレクションから生成されたStreamは、元のコレクションの変更に対して非常に弱いです。 それはスレッドセーフなコレクションから生成されたとか関係ないものです。 ただ、これが小さなCAUTIONの中に書かれていたりするので、読み飛ばさないようにしたほうがよいでしょう。

また、新たな発見のところでも書いたファイルIOからStreamを生成する場合のリソースリークの可能性を発見したのも、メモを読んでいる時です。