Javaはなぜ関数型言語になろうとしているのか
今のJavaはオブジェクト指向言語である、というよりも、関数型言語になろうとしているように思えた。
ラフなメモ。
【参考】
JavaプログラマのためのIOモナド - kmizuの日記
yasuabe blog: Java8 の Optionalを Haskellの Maybeモナドっぽく使ってみる
Java の語彙で Maybe を説明してみる - ぐるぐる~
JavaでMonadをはじめからていねいに :: Igreque -> Info
モナドとは「メソッド内の副作用の存在を戻り値の型で表現する」ためのデザインパターンです - Qiita
関数型プログラミングなんもわからん。を考えようと言うイベントを開きました。
ラムダ式や関数型インターフェイスは、まあ書けば理解できるが、OptionalクラスやStreamクラスがなぜ必要なのか、正直分かってない。
ネットで漁って、OptionalクラスはMaybeモナド、StreamクラスはListモナドである、という文章を見つけて、そんな難しい構造を持っていたのか、と今頃気づいてる。
StreamのAPIはMapReduceと同じだな、とか。
モナドを支える圏論は大学院のときに代数幾何学の一つの理論として読んだことがあるが、写像を集合とみなして公理系を打ち立てる、ぐらいのイメージしかなくて、プログラミングの観点でモナドがどのように扱われるのか、まだ理解できていない。
今は、モナドとは、メソッドを副作用を持たない関数にした時、戻り値に状態の型のように副作用の型を持たせるとみなして理解している。
普段の業務系Webシステムで、DBにデータを出し入れするぐらいであれば、関数型言語をわざわざ使って並列処理を効率化するようなシチュエーションなんてない。
ロードバランサ、Webキャッシュみたいに、大量のトランザクションを捌くような処理は、正直フレームワークの中に隠れてしまっていて、普通のプログラマであればそんな低レイヤーは気にしないし、気にしないようなオブジェクト指向なフレームワークを作るべきだと思う。
今のJavaはオブジェクト指向言語だけでなく、関数型言語のAPIも追加されているため、非常に膨大で複雑化してしまっているように思える。
なぜJavaは、わざわざ関数型言語のAPIを取りれたのか?
オブジェクト指向言語のAPIで十分なはずなのに。
Scalaの出現とも絡んでいるのか?
たとえば、Scalaの本を読むと、ScalaのAPIはJavaのAPIと非常によく似ている。
ScalaのOptionはJavaのOptionalと挙動が同じ。
ScalaのFutureはJavaのFutureと挙動が同じ。
Scalaのトレイトは、Javaのインターフェイスがdefaultやstaticで実装メソッドを持つようになったのと同じ。
もちろん、map, flatMapなどはScalaもJavaも挙動が同じ。
つまり、ScalaはJavaとかなり互換性があるように思える。
単にScalaがJVMに乗っていて、JavaAPIを呼び出せる事実以上に、言語の思想としてもJavaがScalaに影響を受けているように思える。
気になるのは、Scalaの書籍は2010年頃に大量に出版されたのに、今はあまり出版されていないこと。
人気も下火になったのかな?
「Javaはなぜ関数型言語になろうとしているのか」については調べてみる。
| 固定リンク
「プログラミング」カテゴリの記事
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのモジュールシステムは複雑性をより増している(2022.09.10)
- Javaはなぜ関数型言語になろうとしているのか(2022.09.02)
- Javaのラムダ式の考え方(2022.08.10)
- Javaはオブジェクト指向言語ではなく関数型言語だった~「[増補改訂]関数プログラミング実践入門」はお勧めの本だ(2022.08.06)
コメント