67 votes

Qu'est-ce qu'un "polymorphisme à la carte" et comment puis-je en bénéficier?

Dans son discours, Simple, Facile, Rick Hickey parle dePolymorphisme à la carte" (30:00 dans la vidéo). Dans le même contexte, il mentionne aussi Haskell Type de Classes et Clojure est Multi-Méthodes (et protocoles).

Depuis que je ne suis pas très familier avec ces concepts, je voudrais comprendre son utilité en essayant d'atteindre la simplicité. Je suis particulièrement intéressé par des exemples ou des vitrines de ce concept en Scala.

33voto

xiefei Points 2979

Vous pouvez prendre Polymorphism a la carte comme Polymorphism on demand.

Clojure de la communauté sont fiers du terme Polymmorphism a la carte , en raison du fait que clojure en charge plusieurs polymorphisme des stratégies. Certains d'entre eux sont:

  • Prototype à base de Polymorphisme
  • L'Héritage Polymorphisme

    C'est le polymorphisme de la stratégie utilisée par java. Clojure l'appui de cette par procuration. Utile quand on fait de java interop.

  • Protocole

    Protocole de clojure est comme TypeClass à Haskell.

  • Multimethod

    Alors que les protocoles de fournir polymophic expédition basée sur le type du premier argument, multimethods sont beaucoup plus souple, ce qui peut l'expédition basée sur n'importe quelle fonction de la méthode de (tout) les arguments .

Polymorphism a la carte signifie "choisir ce que l'polymorphisme de la stratégie de meilleur pour votre cas. Ils sont tous en vous boîte à outils".

Vous pouvez implémenter TypeClass modèle en scala à l'aide implicites. Lire Scalaz source si vous voulez realworld exemples. Scala ne prend pas en charge multimethods au niveau de la langue, mais je suppose que c'est possible avec l'aide de la prochaine 2.10 macro.

Comme pour les avantages, les avancées polymophism stratégies telles que TypeClass et Multimethod peut aider à résoudre le Problème de l'Expression. "Le but est de définir un type de données par cas, où l'on peut ajouter de nouveaux cas pour le type de données et de nouvelles fonctions sur le type de données, sans avoir à recompiler le code existant, et tout en conservant le type statique de la sécurité (par exemple, pas de jette)".

Btw, cette question est trop grand pour tenir dans une seule stackoverflow question. Ma suggestion est de se familiariser avec ces notions, et puis vous allez comprendre leur utilité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X