makotan _at_ gmail dot com

Java8は関数型言語では無い理由

某TLでちょっと話題だったので、書いてみるテスト

理由その1 関数は一級のオブジェクトでは無い。

Reflectionで・・・はさておき、プログラム言語の仕様としては関数をそのまま変数のように扱えないよね
って意味で違う

理由その2 部分適用が無い

自分で別のinterfaceを定義をする以外に部分適用する術が無い。

理由その3 型推論が無い

ほんの一部の例外を除いて型推論が無い。

理由その4 関数の副作用有りがデフォルト

意識的に副作用無しに書けるけど、副作用有りがデフォルト

以上4つの理由でJava8は関数型言語では無い


とはいえ・・・
部分適用も型推論コンパイラが頑張れば出来ちゃいそうな話だし(実際一部の型推論は出来たわけだし)
末尾最適化はコンパイラがかなり頑張らないとあれだろうけど・・・


でも、上記4つがないとしてもJava8はこれまでで最高のJava言語だとおもう。
そしてJVMのパフォーマンスが好きなので、やっぱりJava良いなって思う