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

استخدام 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.

الأسئلة الشائعة
هل درس «التعريف الديناميكي للدوال» مجاني؟
نعم — نص درس «التعريف الديناميكي للدوال» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ما هي البرمجة الوصفية؟
- التعريف الديناميكي للدوال
- الفئات المفتوحة والترقيع بالقرد
- استخدام send وeval