質問

これは矛盾であるかもしれませんが、関数型プログラミングスタイルでデータエンティティをどのように更新しますか?私が読んだすべてから、関数型プログラミングは変換を使用して不変のエンティティの出力を返します。私が考えることができる唯一のことは、元のエンティティを完全に置き換えることですが、それは古典的な更新アプローチとほとんど同じようです。

役に立ちましたか?

解決

ディスクデータベースエンティティまたはメモリ内のデータ構造について話していますか。

後者の場合、関数型言語は永続的なデータ構造を使用します。これは、更新後に新しいバージョンと古いバージョンの両方が使用可能になるように実装されますが、共通の部分を共有します(効率的です)。したがって、まったく新しいデータ構造を返すように見えますが、実際には、実装の大部分を変更中のデータ構造と共有しています。

clojureのソース(Javaで記述)を見ると本当に良い実装がいくつかあります-私は私のブログでそれらの2つを分解しました

http://www.loufranco .com / blog / files / 20-Days-of-Clojure-Day-7.html

http://www.loufranco .com / blog / files / 20-Days-of-Clojure-Day-8.html

他のヒント

ルー・フランコが持っています。関数型言語のデータ構造は、それらを変更するために「完全に置換」するように実装されています。元のエンティティ。舞台裏では、彼らはまだ古いもののほとんどを使用しています:彼らは変更されたビットを置き換えるだけです。古いバージョンもまだ存在しますが、ガベージコレクションは、誰も参照しない限り、最終的にそれを破壊します。

簡単な答えは、機能的なスタイルでは、各データエンティティは不変であるため、更新は実際には更新された値を持つ新しいデータエンティティであり、.NETでの文字列の動作のようなものです

IOを扱うときに本当に興味深い課題が発生します。I/ Oを純粋に機能的な方法でモデル化するのは難しくなり、モナド

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top