Estou lendo sobre tipos de dados algébricos (graças a Richard Minerich, encontrei esta excelente explicação do conceito). Embora eu entenda a noção de tipos de soma e tipos de produtos, etc., o que não entendo é como os Tipos de Dados Algébricos são úteis além de especificar a correspondência de padrões. Que outras coisas podemos fazer com os ADT além da correspondência de padrões?
Edição: Eu não estou perguntando o que um desenvolvedor pode fazer com ADT que não pode ser feito com objetos. Estou perguntando se existem outras operações que o ADT permite; por exemplo, alguém pode fazer um raciocínio adicional sobre os tipos envolvidos se os ADTs forem empregados? Os ADTs facilitam algum tipo de análise de tipo que não seria possível sem eles?
fonte
Respostas:
Os tipos de dados algébricos são distintos, pois podem ser construídos a partir de vários tipos de "coisas". Por exemplo, uma Árvore pode conter nada (Vazio), Folha ou Nó.
Como um Nó é composto por duas Árvores, os tipos de dados algébricos podem ser recursivos.
A correspondência de padrões permite que os tipos de dados algébricos sejam desconstruídos de maneira a manter a segurança dos tipos. Considere a seguinte implementação de profundidade e seu equivalente em pseudocódigo:
comparado com:
Isso tem a desvantagem de que o programador deve se lembrar de colocar Vazio antes de Folha para que o campo1 não seja acessado em uma árvore Vazia. Da mesma forma, o caso Leaf deve ser declarado antes do caso Node para que o campo2 não seja acessado no Leaf. Portanto, a segurança do tipo não é mantida pela linguagem, mas impõe carga cognitiva adicional ao programador. A propósito, eu estou pegando esses exemplos diretamente das páginas da Wikipedia.
Obviamente, um idioma de digitação de pato poderia fazer algo assim:
Portanto, os tipos de dados algébricos podem não ser estritamente melhores que os equivalentes a OOP, mas fornecem um conjunto diferente de tensões para trabalhar na construção de software.
fonte
Eu não sou tão certo a explicação é tudo o que excelente.
Os tipos de dados algébricos são usados para criar estruturas de dados, como listas e árvores.
Por exemplo, árvores de análise são facilmente representadas com estruturas de dados algébricas.
Na verdade, não seria necessário muito mais para representar a linguagem C.
Mas, na verdade, você pode fazer tudo com tipos de dados algébricos. O Lisp prova que você pode fazer tudo com pares e os ADTs simplesmente fornecem uma maneira mais granular e segura de digitar para essa abordagem.
Obviamente, se você perguntar: "O que você pode fazer com ADTs, que você não pode fazer com objetos?", A resposta é "nada". Somente às vezes (principalmente) você encontrará soluções em ADTs que são significativamente menos detalhadas, enquanto as baseadas em objetos são sem dúvida mais flexíveis. Então, para colocá-lo em uma árvore de análise representada por ADTs:
fonte