Вопрос

Это может быть оксюморон, но как обновить сущность данных в стиле функционального программирования? Из всего, что я читал, программирование в функциональном стиле использует преобразования для возврата вывода неизменяемых объектов. Единственное, о чем я могу думать, это полностью заменить исходную сущность, но это выглядит почти так же, как классический подход к обновлению.

Это было полезно?

Решение

Вы говорите об объектах дисковой базы данных или структурах данных в памяти.

В последнем случае функциональные языки используют постоянные структуры данных, которые реализованы таким образом, что новая версия и старая версия оба доступны после обновления, но они имеют общие части (так что это эффективно). Таким образом, вы, похоже, возвращаете совершенно новую структуру данных, но на самом деле она разделяет большую часть своей реализации с той, которую она модифицировала.

В исходном коде clojure (написанном на Java) есть несколько действительно хороших реализаций - в своем блоге я взял два из них

http: //www.loufranco .com / блог / файлы / 20-Days-оф-Clojure-Day-7.html

http: //www.loufranco .com / блог / файлы / 20-Days-оф-Clojure-Day-8.html

Другие советы

У Лу Франко это есть. Структуры данных на функциональных языках реализованы таким образом, что для их изменения вы «полностью заменяете» оригинальная сущность. За кулисами они все еще используют большую часть старого: они просто заменяют измененные биты. Старая версия все еще существует, но сборщик мусора в конечном итоге уничтожит ее, пока никто не ссылается на нее.

Короткий ответ заключается в том, что в функциональном стиле каждый объект данных будет неизменным, поэтому обновление - это действительно новый объект данных с обновленным значением, что-то вроде того, как работают строки в .NET.

Реальные интересные проблемы возникают при работе с IO, становится трудно моделировать ввод-вывод чисто функциональным образом, что приводит к обходным путям, таким как Монады .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top