Effective java 3版 読書会 11日目

実施日時:2019/3/5 22:00~23:00
対象範囲:項目46~項目49
参加者:yodai、yoridori、kassyi
形式:オンライン(discord)
   課題本を事前に読み、実業務と照らし合わせて記述内容の
   議論をする。

項目46 ストリームで副作用のない関数を選ぶ
212Pのパラダイムを使っていない例、あらかじめ用意されているマップにForEachで追加している。
この場合なら、collectでgroupingByを使った方が良い。
javaであらかじめ用意されたAPIを使うべき
collectのAPIは業務でも使いやすい。
for文のネストを使わなくても良い。
collectorsのメンバーをstaticインポートするとあるが、業務では使っていない。
実業務では、使えそうなAPIを探して使う感じ。
toListは使いやすい。

項目47 戻り値型としてStreamよりもCollectionを選ぶ
メソッドの返却をストリームでなくコレクションにするべき
ストリームにするとイテレータを使えなくなる。
また、使えるにしても面倒な処理が必要。

項目48 ストリームを並列化するときは注意を払う
パラレルを使ってもiteraterやlimitが使われていると、並列化の恩恵を期待できない
arryListやhashmapなどの分割処理できるものはパラレルで効果が期待できそう。
また、処理のオーバーヘッドがかかる模様なので、大きめのリストやマップでないと効果は期待でき無さそう
min,max,count,sumなどは並列化に適している
collectはオーバーヘッドがかかりそうなので、並列化に適していないと思われる。
活性エラーや安全性エラーなどが引き起こされるので、スレッドと同じような注意を払う必要がある。
パフォーマンスを向上できそうなら実施する。
ダメそうなら辞める。

項目49 パラメータの正当性を検査する
エラーが有ったら、オブジェクトを初期状態に戻すべき
エラー発生後にもパラメータとして渡されたListに値が入ったままであることはいけないことなので、初期状態に戻すべき。
p229のassertは実務で使ったことが無い
assertを使うより、if文などでパラメータがあるかをチェックするべき。
パラメータのチェックの必要性は、Listなどは例外で、ループの中で実施する。
パラメータの正当性検査で不合格になり、例外をスローする時は、例外翻訳イデオムを使うべき。

協力:Tech Baton
https://tech-baton.studio.design/

この記事が気に入ったらサポートをしてみませんか?