Pergunta

Isto pode ser um oxímoro, mas como seria um atualizar uma entidade de dados no estilo de programação funcional? De tudo que li, programação estilo funcional usa transformações para retornar uma saída em entidades imutáveis. A única coisa que posso imaginar seria para substituir completamente a entidade original, mas que parece quase o mesmo que uma abordagem atualização clássico.

Foi útil?

Solução

Você está falando sobre as entidades do banco de dados de disco ou dados-estruturas na memória.

Para este último, linguagens funcionais usar estruturas de dados persistentes, que são implementados de modo que a nova versão ea versão antiga estão disponíveis após a atualização, mas eles compartilham partes comuns (de modo que o produto é eficiente). Então, você parece estar retornando uma totalmente nova estrutura de dados, mas na verdade, que compartilha a maioria de sua implementação com o que foi modificado.

Existem alguns realmente bons implementações para olhar na fonte clojure (escrito em Java) - Tomei dois deles separados no meu blog

http: //www.loufranco .com / blog / arquivos / 20-dias-de-Clojure-Day-7.html

http: //www.loufranco .com / blog / arquivos / 20-dias-de-Clojure-Day-8.html

Outras dicas

Lou Franco tem. estruturas de dados em linguagens funcionais são implementados de tal forma que para modificá-los, você "substituir completamente" a entidade originais. Nos bastidores, eles ainda usam a maior parte do antigo: eles simplesmente substituir os bits alterados. A versão antiga ainda existe, também, mas a coleta de lixo irá destruí-lo, eventualmente, enquanto referências ninguém-lo.

A resposta curta é que no estilo funcional, cada entidade de dados seria imutável, então uma atualização é realmente uma nova entidade de dados com o valor atualizado, tipo de como como cordas trabalhar em .NET.

Os desafios interessantes reais vêm quando se lida com IO, torna-se difícil de modelar I / O de uma forma puramente funcional que leva a soluções alternativas, como Monads .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top