0Pricing
Clojure Functional Programming & JVM Backend Development · درس

Protocols وMultimethods لتعدد الأشكال

توفر Clojure أداتين مرنتين لتعدد الأشكال، تتكاملان مع وحدات الماكرو والتصميم المعياري. يعلّمك هذا الدرس استخدام protocols وmultimethods لكتابة شيفرة قابلة للتوسعة ومنفصلة.

Protocols وMultimethods لتعدد الأشكال درس مجاني في Clojure Functional Programming & JVM Backend Development على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Clojure Functional Programming & JVM Backend Development، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Clojure Functional Programming & JVM Backend Development 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

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.

الأسئلة الشائعة

هل درس «Protocols وMultimethods لتعدد الأشكال» مجاني؟

نعم — نص درس «Protocols وMultimethods لتعدد الأشكال» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Clojure Functional Programming & JVM Backend Development، انتقل إلى CoddyKit PRO. تتضمن دورة Clojure Functional Programming & JVM Backend Development 4 دروس في المجموع.

ماذا ستتعلم في «Protocols وMultimethods لتعدد الأشكال»؟

توفر Clojure أداتين مرنتين لتعدد الأشكال، تتكاملان مع وحدات الماكرو والتصميم المعياري. يعلّمك هذا الدرس استخدام protocols وmultimethods لكتابة شيفرة قابلة للتوسعة ومنفصلة. تتمرن على Clojure Functional Programming & JVM Backend Development مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Clojure Functional Programming & JVM Backend Development؟

لا تُشترط خبرة سابقة. Clojure Functional Programming & JVM Backend Development على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «Protocols وMultimethods لتعدد الأشكال»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Clojure Functional Programming & JVM Backend Development هذا؟

نعم. كل درس في Clojure Functional Programming & JVM Backend Development يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. فهم وحدات ماكرو Clojure
  2. تعريف مساحات الأسماء واستخدامها
  3. تنظيم الشيفرة باستخدام الوحدات
  4. Protocols وMultimethods لتعدد الأشكال
← العودة إلى Clojure Functional Programming & JVM Backend Development