0Pricing
Ruby Academy · درس

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.privileges

include في مقابل 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

  1. تعريف Modules
  2. include وextend
  3. Comparable وEnumerable
  4. prepend وحلّ الدوال
← العودة إلى Ruby Academy