言葉は違えども、考えていることは全く同じ。
何のことかというと、これ。
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文法の自然な拡張』であり、関数指向な記述というのは副次的な効果でしかありませんが、似たようなところもあるので参考にはなりました。