« 「現代病「集中できない」を知力に変える 読む力 最新スキル大全」の感想 | トップページ | GSNや因果ループ図を本番障害のなぜなぜ分析に使うアイデア »

2022/09/02

Javaはなぜ関数型言語になろうとしているのか

今のJavaはオブジェクト指向言語である、というよりも、関数型言語になろうとしているように思えた。
ラフなメモ。

【参考】
JavaプログラマのためのIOモナド - kmizuの日記

yasuabe blog: Java8 の Optionalを Haskellの Maybeモナドっぽく使ってみる

Java の語彙で Maybe を説明してみる - ぐるぐる~

JavaでMonadをはじめからていねいに :: Igreque -> Info

モナドについてSwiftで説明してみた - Qiita

モナドとは「メソッド内の副作用の存在を戻り値の型で表現する」ためのデザインパターンです - 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はなぜ関数型言語になろうとしているのか」については調べてみる。

|

« 「現代病「集中できない」を知力に変える 読む力 最新スキル大全」の感想 | トップページ | GSNや因果ループ図を本番障害のなぜなぜ分析に使うアイデア »

プログラミング」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« 「現代病「集中できない」を知力に変える 読む力 最新スキル大全」の感想 | トップページ | GSNや因果ループ図を本番障害のなぜなぜ分析に使うアイデア »