java8のOptionalにモナドのためのメソッドがないことによる想像される未来

また、きしだだんのblogへのトラックバックすいません・・・

Java8でのプログラムの構造を変えるOptional、ただしモナドではない
http://download.java.net/jdk8/docs/api/java/util/Optional.html

追記:このblog書いた意味がなくなる以下のような話が・・・!?





一応追加される前に書いた内容ものせておきます・・・


ScalaのflatMapのようなメソッドはついてないけど、外部にそのようなstaticな関数をつくって、flatMap相当の処理を

Optional<String> foo = bar();
return OptionUtil.flatMap(foo,o -> baz(o)); // OptionUtilは自分で作ったstaticメソッドがいくつか置いてあるクラス

と書くことは可能です https://gist.github.com/xuwei-k/5643241 同じくmapも。
なので

  • そういうOptionalUtil的なクラスを作る人がある程度でてくる?
  • すでにOptional的なものをJava7以前から持ってる人、ライブラリ*1は、flatMap相当のメソッドを追加して、標準を使わずに、それを使い続ける可能性も?
  • でも、標準ライブラリのOptionalとの相互運用も考えて、それぞれ独自OptionとOptionalの相互変換のためのユーティリティができる?
  • それとはべつに、Optionalの意味がわからずに、getメソッドばかり使う残念なプログラマがある程度でてきて、ぬるぽの変わりにNoSuchElementExceptionを毎日見るかわいそうな人達がでてくる・・・

などなど、他にも色々考えられますが、さてどうなるんでしょうかね。
そういう意味では、個人的には最初から標準のOptionalは期待していない(flatMap以外にも足りないものはいっぱい出てくる)ので、標準のOptionalはもうこれでいい気がします。
(全体から見ればそういうのはそれほど多くないでしょうけれど)独自Option、もしくはOptionalのための独自ユーティリティがどのくらい発生するのかが見どころ(?)です。


ちなみに、個人的にもしJavaで書く機会があるとしたら、独自Optionをつくって(もしくは、Functional JavaなどのOptionを使う)標準のOptionalはできるだけ使わない、とかをやるかもしれません。最低でも、flatMapできるOptionalUtil的なユーティリティは(なければ)つくりますね・・・。

*1:数えたことないけど、結構あるはず