souki-paranoiastのブログ

地方都市でプログラマーをやっている人のブログ。技術ネタ以外も少し書く。メインの言語はJava。https://paranoiastudio-japan.jimdo.com/ に所属

CollectionとOptionalを同時に使うことってあるのかね?

たまたまWebで見かけたコードで、コーディング規約的なものも存在するかもしれないから真意はわからないのだけど、

Optional<List<T>> getXxxList();

みたいなソースを見かけた。

Optionalって基本的には値が存在しない可能性を示すためのものでしょ?
Collectionでも値が存在しないことを示せると思うんだよなー。lengthが0なら値なしでしょう。
逆に言えばnullとlength==0とNoneの3つは全て別扱いってことだけど、全部分岐入れるのか? …みたいな疑問が。

ただ、Optionalが存在しない時代はreturn nullみたいなことをしてたってことか?とも思ったのだけど、
自分自身やったような記憶がある。猛省したい。リファクタリングしたい。
空CollectionなんてJavaならCollectionsに入ってたりするんだからコストも変わらないからね。

ということで、こんな感じ

Optional<List<T>> getXxxList(); // List<T>で良い
List<Optional<T>> getXxxList(); // わかる。必要ありそう。
Tuple<Result, List<T> getXxxList(); // nullとlength==0を別物としたい場合 ※1

※1 自分はこういうアプローチの方が好きだけど、否定派の方が多いとは思う。Result見る手間がJavaは面倒だし。



ここまで書いておいてあれだけど、どうでも良いな。
パーキンソンの凡俗法則で片付いてしまう気がする。
もっと身のある記事を書きたい。