読者です 読者をやめる 読者になる 読者になる

この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

ドッペルゲンガー?

Java

言葉は違えども、考えていることは全く同じ。


何のことかというと、これ。

http://www.infoq.com/news/2014/11/lang-ext-csharp-functional-exts
http://github.com/louthy/language-ext


このライブラリ、僕が作ったIndolentlyにソックリなんです。
関数名もそっくりで、違うところを探すほうが難しいほど(当社比)。


…とはいえ、例えばlist()なんて選択の余地があるわけじゃないから、類似するのは当たり前なんですけどね。


このライブラリ、コミットログを見ると初回コミットは2週間前*1のようです。
一方で僕が作ったIndolentlyの初回コミットは4ヶ月ほど前。
ほとんど同時期に、全く同質と言っても過言ではない2つのライブラリが、それぞれ完全なオリジナルとして生まれたというのは、非常に面白い話だと思います。


C#Javaよりも語彙が多いので、より関数プログラミングっぽく書けるようです。
例えばLINQを使ってこんな風に書ける。

match( from x in two
           from y in four
           from z in six
           select x + y + z,
           Some: v => Assert.IsTrue(v == 12),
           None: () => failwith<int>("Shouldn't get here") );

これは素直に羨ましい所。さすがにLINQは無理としても、せめてvarくらいは。。。
Java10くらいで実装されるといいな。

最大の違いは

知名度ですね。(ハッキリ)

Language-Extは短期間でかなり有名になっている一方で、拙作Indolentlyのユーザーは1名です。(自分だけ)
どなたか試してみて頂けませんか。。。Javadoc頑張りますんで。

機能の要望もぜひどうぞ。

2014-12-14追記

今日知ったのですが、こういうのものがあるようです。

http://www.functionaljava.org/

パッと見では原理主義的なAPIのようなので、できるだけピュアな関数指向で書きたい方は向いているかも。まあ、「そこまでするならScala使えば?」という気がしないでもないですが。


僕がIndolentlyで実現しているのは『Java文法の自然な拡張』であり、関数指向な記述というのは副次的な効果でしかありませんが、似たようなところもあるので参考にはなりました。