โพรโทคอลและเมธอดหลายรูปแบบสำหรับพหุสัณฐาน
Clojure มีเครื่องมือพหุสัณฐานที่ยืดหยุ่นสองแบบ ซึ่งเสริมการทำงานของแมโครและการออกแบบแบบโมดูลาร์ บทเรียนนี้สอนโพรโทคอลและเมธอดหลายรูปแบบสำหรับโค้ดที่ขยายได้และแยกส่วน
โพรโทคอลและเมธอดหลายรูปแบบสำหรับพหุสัณฐาน เป็นบทเรียน Clojure Functional Programming & JVM Backend Development ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 typesChoosing 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.
คำถามที่พบบ่อย
บทเรียน “โพรโทคอลและเมธอดหลายรูปแบบสำหรับพหุสัณฐาน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “โพรโทคอลและเมธอดหลายรูปแบบสำหรับพหุสัณฐาน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Clojure Functional Programming & JVM Backend Development ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Clojure Functional Programming & JVM Backend Development มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “โพรโทคอลและเมธอดหลายรูปแบบสำหรับพหุสัณฐาน”
Clojure มีเครื่องมือพหุสัณฐานที่ยืดหยุ่นสองแบบ ซึ่งเสริมการทำงานของแมโครและการออกแบบแบบโมดูลาร์ บทเรียนนี้สอนโพรโทคอลและเมธอดหลายรูปแบบสำหรับโค้ดที่ขยายได้และแยกส่วน คุณปฏิบัติ Clojure Functional Programming & JVM Backend Development ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Clojure Functional Programming & JVM Backend Development หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Clojure Functional Programming & JVM Backend Development บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “โพรโทคอลและเมธอดหลายรูปแบบสำหรับพหุสัณฐาน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Clojure Functional Programming & JVM Backend Development นี้ได้ไหม
ได้ บทเรียน Clojure Functional Programming & JVM Backend Development ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ทำความเข้าใจมาโครของ Clojure
- การกำหนดและใช้งานเนมสเปซ
- การจัดระเบียบโค้ดด้วยโมดูล
- โพรโทคอลและเมธอดหลายรูปแบบสำหรับพหุสัณฐาน