Обновления в функциональном стиле

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

Введение в одну из самых важных концепций в React - функциональное программирование
Введение в одну из самых важных концепций в React - функциональное программирование
React разработан с использованием концепции функционального программирования, поэтому понимание функционального программирования важно для изучения...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
4
0
608
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

Ответ принят как подходящий

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

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

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

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

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

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