Je lis sur les types de données algébriques (grâce à Richard Minerich, j'ai trouvé cette excellente explication du concept). Bien que je pense comprendre la notion de types de somme et de types de produits, etc., ce que je ne comprends pas vraiment, c'est comment les types de données algébriques sont utiles au-delà de la spécification de la correspondance de modèles. Quelles autres choses peut-on faire avec l'ADT au-delà de la correspondance de motifs?
EDIT: Je ne demande pas ce qu'un développeur peut faire avec des ADT qui ne peuvent pas être faits avec des objets. Je demande s'il y a d'autres opérations autorisées par ADT; par exemple, peut-on faire un raisonnement supplémentaire sur les types impliqués si des ADT sont employés? Les ADT facilitent-ils une sorte d'analyse de type qui ne serait pas possible sans eux?
la source
Réponses:
Les types de données algébriques sont distincts en ce qu'ils peuvent être construits à partir de plusieurs types de «choses». Par exemple, un arbre peut contenir soit rien (vide), une feuille ou un nœud.
Puisqu'un nœud est composé de deux arbres, les types de données algébriques peuvent être récursifs.
La correspondance de modèles permet de déconstruire les types de données algébriques de manière à maintenir la sécurité des types. Considérez l'implémentation suivante de depth et de son équivalent pseudocode:
par rapport à:
Cela présente l'inconvénient que le programmeur doit se rappeler de mettre en cas Empty avant Leaf afin que field1 ne soit pas accessible sur une arborescence vide. De même, le cas Leaf doit être déclaré avant le cas Node afin que le champ2 ne soit pas accessible sur Leaf. Ainsi, la sécurité des types n'est donc pas maintenue par le langage mais impose plutôt une charge cognitive supplémentaire au programmeur. Soit dit en passant, je prends ces exemples directement à partir des pages wikipedia.
Bien sûr, une jauge de type canard pourrait faire quelque chose comme ceci:
Ainsi, les types de données algébriques peuvent ne pas être strictement meilleurs que leur équivalent OOP, mais ils fournissent un ensemble de tensions différent avec lequel travailler lors de la construction d'un logiciel.
la source
Je ne suis pas sûr que l'explication soit si excellente.
Les types de données algébriques sont utilisés pour créer des structures de données, telles que des listes et des arbres.
Par exemple, les arbres d'analyse sont facilement représentés avec des structures de données algébriques.
Il ne faudrait pas vraiment beaucoup plus pour représenter le langage C.
Mais vraiment, vous pouvez tout faire avec des types de données algébriques. Lisp prouve que vous pouvez tout faire avec des paires et des ADT.
Bien sûr, si vous demandez: "Que pouvez-vous faire avec les ADT, que vous ne pouvez pas faire avec les objets?", La réponse est "rien". Ce n'est que parfois (principalement) que vous trouverez que les solutions sur les ADT sont beaucoup moins verbeuses, tandis que celles basées sur des objets sont sans doute plus flexibles. Donc, pour le mettre dans un arbre d'analyse représenté avec des ADT:
la source