Clojure Functional Programming & JVM Backend Development · Leçon

Protocoles et multiméthodes pour le polymorphisme

Clojure propose deux outils flexibles de polymorphisme qui complètent les macros et la conception modulaire. Cette leçon vous apprend à utiliser les protocoles et les multiméthodes pour produire un code extensible et découplé.

Leçon 4 sur 413 étapes

Protocoles et multiméthodes pour le polymorphisme est une leçon Clojure Functional Programming & JVM Backend Development gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Clojure Functional Programming & JVM Backend Development, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Clojure Functional Programming & JVM Backend Development comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Polymorphism in Clojure

Clojure separates data from behavior. Protocols and multimethods let you dispatch behavior without classes or inheritance.

Defining a Protocol

A defprotocol names a set of method signatures, like an interface.

(defprotocol Shape
  (area [s])
  (perimeter [s]))

Implementing With a Record

Use defrecord to create a type that implements the protocol.

(defrecord Circle [r]
  Shape
  (area [_] (* Math/PI r r))
  (perimeter [_] (* 2 Math/PI r)))
(println (area (->Circle 2)))

Dispatch on Type

Protocols dispatch on the type of the first argument. This is fast and the most common polymorphism in Clojure.

Extending Existing Types

Use extend-protocol to add behavior to types you do not own, even built-in ones.

(extend-protocol Shape
  java.lang.Long
  (area [n] (* n n)))
(println (area 5))

When You Need More

Protocols only dispatch on type. When you must dispatch on a value, multiple arguments, or a computed key, reach for multimethods.

Defining a Multimethod

defmulti takes a dispatch function; defmethod supplies an implementation per dispatch value.

(defmulti describe :kind)
(defmethod describe :dog [_] "woof")
(defmethod describe :cat [_] "meow")
(println (describe {:kind :dog}))

The Default Method

Provide a :default method to handle unmatched dispatch values gracefully.

(defmethod describe :default [_] "unknown")
(println (describe {:kind :fish}))

Dispatch on Anything

The dispatch function can compute any value, even from multiple arguments, giving multimethods far more flexibility than protocols.

(defmulti combine (fn [a b] [(:type a) (:type b)]))
; dispatch on a pair of types

Choosing Between Them

Prefer protocols for type-based, performance-sensitive dispatch. Use multimethods when dispatch logic is richer than a single type.

Open for Extension

Both tools are open: new types or methods can be added later in separate namespaces without editing the original code, solving the expression problem cleanly.

Quick Check

Test your polymorphism knowledge.

Recap

You learned protocols with defrecord and extend-protocol for type dispatch, multimethods with defmulti/defmethod for value dispatch, default methods, and how both keep code open for extension.

Gratuit pour commencer

Apprends Clojure avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
12
Leçons
48

Questions Fréquemment Posées

La leçon « Protocoles et multiméthodes pour le polymorphisme » est-elle gratuite ?

Oui — le texte complet de « Protocoles et multiméthodes pour le polymorphisme » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Clojure Functional Programming & JVM Backend Development, passe à CoddyKit PRO. Le cours Clojure Functional Programming & JVM Backend Development comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Protocoles et multiméthodes pour le polymorphisme » ?

Clojure propose deux outils flexibles de polymorphisme qui complètent les macros et la conception modulaire. Cette leçon vous apprend à utiliser les protocoles et les multiméthodes pour produire un c… Tu pratiques Clojure Functional Programming & JVM Backend Development avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Clojure Functional Programming & JVM Backend Development ?

Aucune expérience préalable n'est requise. Clojure Functional Programming & JVM Backend Development sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Protocoles et multiméthodes pour le polymorphisme » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Clojure Functional Programming & JVM Backend Development ?

Oui. Chaque leçon Clojure Functional Programming & JVM Backend Development inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Comprendre les macros de Clojure
  2. Définition et utilisation des espaces de noms
  3. Organisation du code avec des modules
  4. Protocoles et multiméthodes pour le polymorphisme
← Retour à Clojure Functional Programming & JVM Backend Development