Обновления в функциональном стиле
-
06-07-2019 - |
Вопрос
Это может быть оксюморон, но как обновить сущность данных в стиле функционального программирования? Из всего, что я читал, программирование в функциональном стиле использует преобразования для возврата вывода неизменяемых объектов. Единственное, о чем я могу думать, это полностью заменить исходную сущность, но это выглядит почти так же, как классический подход к обновлению.
Решение
Вы говорите об объектах дисковой базы данных или структурах данных в памяти.
В последнем случае функциональные языки используют постоянные структуры данных, которые реализованы таким образом, что новая версия и старая версия оба доступны после обновления, но они имеют общие части (так что это эффективно). Таким образом, вы, похоже, возвращаете совершенно новую структуру данных, но на самом деле она разделяет большую часть своей реализации с той, которую она модифицировала.
В исходном коде clojure (написанном на Java) есть несколько действительно хороших реализаций - в своем блоге я взял два из них
http: //www.loufranco .com / блог / файлы / 20-Days-оф-Clojure-Day-7.html
http: //www.loufranco .com / блог / файлы / 20-Days-оф-Clojure-Day-8.html
Другие советы
Короткий ответ заключается в том, что в функциональном стиле каждый объект данных будет неизменным, поэтому обновление - это действительно новый объект данных с обновленным значением, что-то вроде того, как работают строки в .NET.
Реальные интересные проблемы возникают при работе с IO, становится трудно моделировать ввод-вывод чисто функциональным образом, что приводит к обходным путям, таким как Монады .