include وextend
إضافة السلوك بالخلط
include وextend درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.
مزج السلوك
تتمثّل القوة الحقيقية للوحدات في mixin، أي مشاركة الطرائق بين الأصناف من دون وراثة. والأداتان الأساسيتان هما include وextend.
module Walkable
def walk
"#{name} is walking"
end
end
class Person
include Walkable
attr_reader :name
def initialize(name)
@name = name
end
end
puts Person.new("Ada").walkيضيف include طرائق المثيلات
يمزج include طرائق الوحدة لتصبح طرائق مثيلات. ويحصل كل كائن من الصنف عليها.
module Sayable
def say(msg)
"#{msg}!"
end
end
class Dog
include Sayable
end
puts Dog.new.say("Woof")إعادة الاستخدام بين الأصناف
يمكن تضمين وحدة واحدة في عدة أصناف غير مرتبطة، لمشاركة السلوك من دون أصل مشترك.
module Timestamped
def stamp
"created"
end
end
class Post; include Timestamped; end
class Comment; include Timestamped; end
puts Post.new.stamp
puts Comment.new.stampيضيف extend طرائق الأصناف
يمزج extend طرائق الوحدة لتصبح طرائق أصناف، أي طرائق على كائن الصنف نفسه.
module Findable
def find(id)
"Finding record #{id}"
end
end
class User
extend Findable
end
puts User.find(42)استخدام extend مع كائن
يمكنكم استخدام extend مع كائن واحد، بحيث يحصل هذا الكائن وحده على الطرائق، بينما تبقى الكائنات الأخرى دون تغيير.
module Admin
def privileges
"all access"
end
end
user = Object.new
user.extend(Admin)
puts user.privilegesinclude في مقابل extend
تذكّروا الفرق:
include=> تصبح الطرائق طرائق مثيلات.extend=> تصبح الطرائق طرائق أصناف أو كائنات.
module Helper
def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.helpترى الوحدات طرائق المضيف
تعمل الطريقة الممزوجة في سياق الكائن المضيف، ولذلك يمكنها استدعاء طرائق المضيف نفسه والوصول إلى بياناته.
module Describable
def describe
"I am #{role}"
end
end
class Worker
include Describable
def role; "a worker"; end
end
puts Worker.new.describeخطاف included
عرّفوا self.included(base) لتشغيل الشيفرة تلقائيًا عند تضمين وحدة. ومن الأنماط الشائعة إضافة طرائق الصنف في الوقت نفسه.
module Trackable
def self.included(base)
puts "Trackable added to #{base}"
end
end
class Order
include Trackable
endالتحقّق من العضوية
يكشف is_a? وancestors أن الوحدة المضمّنة تصبح جزءًا من سلسلة أنواع الكائن.
module Flyable; end
class Bird; include Flyable; end
b = Bird.new
puts b.is_a?(Flyable)
p Bird.ancestorsدمج عدة Mixins
يمكن للصنف تضمين عدة وحدات، وتأليف سلوك من أجزاء صغيرة ومركّزة عديدة.
module Swimmable; def swim; "swimming"; end; end
module Runnable; def run; "running"; end; end
class Athlete
include Swimmable
include Runnable
end
a = Athlete.new
puts a.swim
puts a.runجمع المفاهيم
تشارك Mixins السلوك بمرونة:
- استخدموا
includeلطرائق المثيلات. - استخدموا
extendلطرائق الأصناف أو الكائنات المفردة. - تعمل الطرائق الممزوجة في سياق المضيف.
- ألّفوا عدة وحدات صغيرة.
module Greet
def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hiاختبار سريع
اختبروا فهمكم لـ include وextend.
مراجعة
تعلّمتم Mixins:
include=> طرائق المثيلات.extend=> طرائق الأصناف أو الكائنات المفردة.- تعمل الطرائق الممزوجة في سياق المضيف.
- يُفعَّل خطاف
includedعند التضمين.
module Loud
def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")الأسئلة الشائعة
هل درس «include وextend» مجاني؟
نعم — نص درس «include وextend» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ماذا ستتعلم في «include وextend»؟
إضافة السلوك بالخلط تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟
لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «include وextend»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟
نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تعريف Modules
- include وextend
- Comparable وEnumerable
- prepend وحلّ الدوال