0Pricing
Ruby Academy · درس

التعريف الديناميكي للدوال

تعلّموا تعريف الدوال واستدعاءها ديناميكيًا باستخدام define_method وmethod_missing

التعريف الديناميكي للدوال درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.

إنشاء الأساليب ديناميكيًا

تعريف الأساليب ديناميكيًا

يمكن إنشاء الأساليب في Ruby ديناميكيًا أثناء التشغيل.

يتيح ذلك كتابة شيفرة أكثر مرونة وقابلية لإعادة الاستخدام.

التعريف الديناميكي للدوال — رسم توضيحي 1

استخدام define_method

استخدام define_method

تتيح الطريقة define_method تعريف الأساليب ديناميكيًا.

class Person
  define_method(:greet) { puts 'Hello!' }
end

p = Person.new
p.greet

استخدام define_method مع المعاملات

استخدام define_method مع المعاملات

يمكنك تمرير الوسائط إلى الأساليب التي أُنشئت ديناميكيًا.

class Person
  define_method(:greet) { |name| puts "Hello, #{name}!" }
end

p = Person.new
p.greet('Alice')

استخدام method_missing

استخدام method_missing

تعترض الطريقة method_missing الاستدعاءات الموجّهة إلى الأساليب غير المعرّفة.

class Person
  def method_missing(name, *args)
    puts "Method '#{name}' is missing!"
  end
end

p = Person.new
p.unknown_method

معالجة method_missing ديناميكيًا

معالجة method_missing ديناميكيًا

يمكنك استخدام method_missing لتعريف معالجة مرنة للأساليب.

class DynamicPerson
  def method_missing(name, *args)
    if name.to_s.start_with?('say_')
      puts "You asked me to say: #{name.to_s.split('_')[1..-1].join(' ')}"
    else
      super
    end
  end
end

p = DynamicPerson.new
p.say_hello_world

تجاوز respond_to_missing؟

تجاوز respond_to_missing؟

لمعالجة عمليات التحقق من الأساليب بشكل صحيح، تجاوز respond_to_missing?.

class DynamicPerson
  def method_missing(name, *args)
    if name.to_s.start_with?('say_')
      puts "Saying: #{name.to_s.split('_')[1..-1].join(' ')}"
    else
      super
    end
  end
  
  def respond_to_missing?(name, include_private = false)
    name.to_s.start_with?('say_') || super
  end
end

p = DynamicPerson.new
puts p.respond_to?(:say_hello)

استخدام method_missing للوصولات والمُعيّنات الديناميكية

استخدام method_missing للوصولات والمُعيّنات الديناميكية

يمكنك إنشاء سمات ديناميكية باستخدام method_missing.

class DynamicPerson
  def initialize
    @data = {}
  end
  
  def method_missing(name, *args)
    attribute = name.to_s.sub(/=$/, '')
    if name.to_s.end_with?('=')
      @data[attribute] = args.first
    else
      @data[attribute]
    end
  end
end

p = DynamicPerson.new
p.name = 'Alice'
puts p.name

مخاطر method_missing الأمنية

مخاطر method_missing الأمنية

قد يؤدي استخدام method_missing بطريقة غير صحيحة إلى مخاطر:

  • سلوك غير متوقع عند معالجة الأساليب غير المعروفة.
  • مشكلات محتملة في الأداء بسبب عمليات البحث المفرطة عن الأساليب.
  • ثغرات أمنية عند دمجه مع مدخلات المستخدم.

مراجعة الأساليب الديناميكية

تهانينا!

لقد تعلمت كيفية تعريف الأساليب واستدعائها ديناميكيًا في Ruby.

بعد ذلك، ستستكشف الفئات المفتوحة وMonkey Patching.

التعريف الديناميكي للدوال — رسم توضيحي 10

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

هل درس «التعريف الديناميكي للدوال» مجاني؟

نعم — نص درس «التعريف الديناميكي للدوال» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.

ماذا ستتعلم في «التعريف الديناميكي للدوال»؟

تعلّموا تعريف الدوال واستدعاءها ديناميكيًا باستخدام define_method وmethod_missing تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟

لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «التعريف الديناميكي للدوال»؟

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

هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟

نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

  1. ما هي البرمجة الوصفية؟
  2. التعريف الديناميكي للدوال
  3. الفئات المفتوحة والترقيع بالقرد
  4. استخدام send وeval
← العودة إلى Ruby Academy