Equivalente aos princípios do SOLID para programação funcional


36

Eu achei os princípios do SOLID bastante úteis quando pensamos em design orientado a objetos.

Existe um conjunto semelhante / equivalente de princípios agnósticos de linguagem adaptados para programação funcional?


12
FWIW, este foi discutido brevemente sobre SO um ano atrás
— StuartLC


Este vídeo , bem como esses slides apresentar os princípios sólidos aplicada a programação funcional. Ambos usam a linguagem Clojure como exemplo, mas os princípios são válidos em outros idiomas.
— Mascip


Respostas:


14

É um pouco difícil encontrar equivalentes, mas posso tentar:

  • S (SRP) na função FP cria SEMPRE a mesma saída para os mesmos argumentos, isso é chamado de transparência referencial
  • O (OCP) no FP, existe um conceito chamado tipos de dados algébricos, veja como ele se relaciona às hierarquias de classe e que problema ambos tentam resolver 1
  • O princípio da substituição de L (LSP) Liskov é contravariância 2
  • D (DIP) na programação funcional geral obtém abstração através da composição da função, também existem outros mecanismos com a ajuda da teoria das categorias (por exemplo, monóide ou functor), para "Injeção de Dependência" 3

21
Ainda estou pensando em como você passou do Princípio da Responsabilidade Única para a transparência referencial . Esses dois não têm relação. SRP é sobre uma função com um único objetivo. Pode ou não ser referencialmente transparente, com relação a isso.
— Goran Jovic

3
Ah, meu mal - eu entendi agora. São equivalentes no sentido de serem princípios e formar a mesma sigla, não no sentido de significar a mesma coisa ou coisa semelhante. Desculpe pelo voto negativo!
— Goran Jovic

11
Certo, é a maneira pretendida de lê-lo. Tentei descrever um mapeamento para esses termos no contexto de fp.
— AndreasScheinert

Cara, eu odeio que você não possa editar um comentário, na verdade as coisas DEVEM significar pelo menos algo semelhante.
— AndreasScheinert

Talvez funções de ordem superior possam fornecer algum tipo de injeção de dependência: você injeta uma função concreta como parâmetro em uma função genérica (de ordem superior).
— Giorgio

45

O SOLID também é uma boa ideia para os reinos funcionais / imperativos.

SRP - 'Apenas faça uma coisa' foi tirado da programação imperativa em primeiro lugar. Ter pequenas funções focadas é bom.

OCP - Permitir que você altere comportamentos sem modificar o código é bom. A programação funcional usa funções de ordem superior mais do que herança, mas o princípio é válido.

LSP - O cumprimento de algum contrato de interface é tão bom em programação funcional quanto em orientação a objetos. Se uma função de classificação usar um comparador, você esperaria que o '0 seja igual, menor que o resultado negativo, maior que o comportamento positivo'.

ISP - A maioria das linguagens funcionais ainda possui estruturas. A especificação do menor conjunto de dados exigido por uma função ainda é uma boa prática. Exigir a interface menos específica para os dados (por que usar Listas de entradas quando as Enumerações de T funcionam tão bem?) Ainda é uma boa prática.

DIP - especificar parâmetros para uma função (ou uma função de ordem superior para recuperá-los) em vez de codificar a função para obter algum valor é tão bom na programação funcional quanto na orientação a objetos.

E mesmo ao fazer programação orientada a objetos, muitos desses princípios também se aplicam ao design de métodos nos objetos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.