また、きしだだんのblogへのトラックバックすいません・・・
Java8でのプログラムの構造を変えるOptional、ただしモナドではない
http://download.java.net/jdk8/docs/api/java/util/Optional.html
追記:このblog書いた意味がなくなる以下のような話が・・・!?
.@kis さんが数日前に「Java8でのプログラムの構造を変えるOptional、ただしモナドではない」というblog書いたのに、今さっきOptionalにmapとflatMapとfilterが追加されたらしいですよ!?URL
2013-05-29 01:02:08 via web
一応追加される前に書いた内容ものせておきます・・・
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:数えたことないけど、結構あるはず