こんにちわ、みけです。
数々の技術書の翻訳で有名な柴田芳樹さんが
の書評を募集していたので、応募しました。
現在の進捗はこんな感じですが、
- 1章「ラムダ式とは」(未読)
- 2章「ストリームAPIの使い方」(読了)
- 3章「ラムダ式を使ったプログラミング」(途中)
- 4章「JavaFXによるGUIプログラミング」(未読)
- 5章「日付と時刻の新たなAPI」(未読)
- 6章「並行処理の機能強化」(未読)
- 7章「Nashorn JavaScriptエンジンの活用」(読了)
- 8章「その他のJava8機能を理解する」(読了)
- 9章「Java7の機能を復習する」(読了)
とりあえず、2章のみ文章をまとめておいたので、
記載しておきたいと思います。
また、全体的なものについては、後日改めてまとめておきたいと思います。
第二章感想
Java8で最も目玉機能である、Stream
について解説している章です。この章をひと通り読むと、Stream
の概要をつかむことができるでしょう。
僕はこの本を読む前に大体わかっているつもりでしたが、いろいろと新しい発見があったように思います。
新たな発見
Stream
がAutoCloseable
の実装クラスであるということcollect
メソッドによってCollection
に柔軟に収集可能であること
最初の事に関しては別のエントリー
に詳しく書いてあります。
詳しくは上記のエントリーに譲るとして、端的に書くと、ファイルIOでStream
を取得する場合には
try-with-resourceで扱わないとリソースリークが発生する可能性があるということを覚えておいたほうがよいです。
2.については実際に読んで手を動かしてみると納得できると思います。
物足りなかったこと
Optional
についての解説がちょっとしかない
Optional
自体はそれほど機能豊富なものではなく、null
安全性を保証するだけの機能です。
しかし、Javaでのnull
に対するプログラマー間の認識違いが多くのバグの温床になったり、
過剰に防衛的なプログラミングを生み出すなどJavaのコードを汚くする原因にもなっているなど、
Javaのnull
はプログラマーを悩ましてきたものです。
Optional
はnull
に毒されてきたJavaにパラダイムシフトを促すものです。
したがって、いやというほどOptional
についてJavaプログラマーに叩きこむくらいの勢いを持って解説して欲しかったという、
思いがあります。
とはいえ、Cay S.Horstmannにも何か考えがあったのだと思うので、まあ、何かあるんでしょう(トートロジー)。
この章を読むときの注意
メモとかCAUTIONとかすごく小さく扱われている部分ですが、非常に重要な事が書いてあるので読み飛ばさないほうがよいです。
例えば、コレクションから生成されたStream
は、元のコレクションの変更に対して非常に弱いです。
それはスレッドセーフなコレクションから生成されたとか関係ないものです。
ただ、これが小さなCAUTIONの中に書かれていたりするので、読み飛ばさないようにしたほうがよいでしょう。
また、新たな発見のところでも書いたファイルIOからStream
を生成する場合のリソースリークの可能性を発見したのも、メモを読んでいる時です。