English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل Ruby المتقدم

وحدة Ruby (Module)

  • الوحدة (Module) هي طريقة لجمع الطرق والصفحات والمعادلات معًا. تقدم الوحدة (Module) لك ميزتين كبيرتين.يقدم الوحدةالاسم المحدد

  • و تجنب الاسم المتداخل. mixin الوحدة قامت بتحقيق

الاسم المحدد

الوحدة تشبه الصفحة ولكن بها فروق كما يلي:

  • الوحدة لا يمكن إنشاء مثيل منها

  • الوحدة ليس لديها فرع

  • الوحدة يمكن تعريفها فقط من قبل وحدة أخرى

النحو

module Identifier
   statement1
   statement2
   ...........
conclusion

تسمية المعادلات في الوحدة تشبه تسمية المعادلات في الصفحة، تبدأ بالحروف الكبيرة. يبدو تعريف الطريقة أيضًا مشابهًا: تعريف الطريقة في الوحدة يشبه تعريف الطريقة في الصفحة.

من خلال الطريقة في الصفحة، يمكنك وضع اسم الوحدة أمام اسم الطريقة مع نقطة لاستدعاء طريقة الوحدة، يمكنك استخدام اسم الوحدة مع دوقتين لاستدعاء المعادلة.

مثال على الخطوط

#!/usr/bin/ruby
 
# تعريف الوحدة في ملف trig.rb
 
module Trig
   PI = 3.141592654
   def Trig.sin(x)
   # ..
   conclusion
   def Trig.cos(x)
   # ..
   conclusion
conclusion

يمكننا تعريف وحدات تحتوي على نفس الاسم ولكن تحتوي على وظائف مختلفة:

مثال على الخطوط

#!/usr/bin/ruby
 
# تعريف الوحدة في ملف moral.rb
 
module Moral
   VERY_BAD = 0
   BAD = 1
   def Moral.sin(badness)
   # ...
   conclusion
conclusion

مثل الطريقة في الصفحة، عندما تعرف طريقة في الوحدة، يمكنك تحديد اسم الوحدة بعد نقطة، ثم اسم الطريقة.

روبي require الجملة

جملة require تشبه جملة include في C و C++ و جملة import في Java. إذا كان برنامجًا ثالثًا يريد استخدام أي وحدة معينة، يمكنه ببساطة استخدام Ruby require استخدام جملة لتحميل ملفات الوحدة:

النحو

النحو

require filename

في هذا المكان، امتداد الملف .rb ليس ضروريًا.

مثال على الخطوط

$LOAD_PATH << '.'
 
require 'trig.rb'
require 'moral'
 
y = Trig.sin(Trig::PI/4)
wrongdoing = Moral.sin(Moral::VERY_BAD)

في هذا المكان، نستخدم $LOAD_PATH << '.' اجعل Ruby يعرف أنه يجب البحث في الملفات المشار إليها في الدليل الحالي. إذا لم تكن ترغب في استخدام $LOAD_PATH، يمكنك استخدام require_relative لإشارة إلى ملف من دليل نسبي.

ملاحظة:في هذا، يحتوي الملف على نفس أسماء الوظائف. لذا، سيؤدي هذا إلى تشويه الكود عند الاستدعاء، ولكن يمنع المodule هذا التشويه، ويمكننا استخدام اسم المodule لاستدعاء الوظيفة المناسبة.

روبي include الجملة

يمكنك تضمين المodule في الفئة. من أجل تضمين المodule في الفئة، يمكنك استخدام include الجملة:

النحو

include modulename

إذا كان المodule معرفًا في ملف منفرد، فإنه يجب استخدام require تعبر عن ملف.

مثال على الخطوط

افترض أن المodule المكتوبة في support.rb في الملف.

module Week
   FIRST_DAY = "الأحد"
   def Week.weeks_in_month
      puts "تملك أربعة أسابيع في الشهر"
   conclusion
   def Week.weeks_in_year
      puts "تملك 52 أسبوعًا في السنة"
   conclusion
conclusion

الآن، يمكنك استخدام هذا المodule في الفئة كما يلي:

مثال على الخطوط

#!/usr/bin/ruby
$LOAD_PATH << '.'
require "support"
 
class Decade
include Week
   no_of_yrs=10
   def no_of_months
      puts Week::FIRST_DAY
      number=10*12
      puts number
   conclusion
conclusion
d1=Decade.new
puts Week::FIRST_DAY
Week.weeks_in_month
Week.weeks_in_year
d1.no_of_months

سيكون هناك نتيجة كما يلي:

الأحد
تملك أربعة أسابيع في الشهر
تملك 52 أسبوعًا في السنة
الأحد
120

Mixins في روبي

قبل قراءة هذا الفصل، تحتاج إلى فهم مبدأ التوجه للأ�체ة بشكل أساسي.

عندما يمكن للفئة أن تورث خصائص الفئات المختلفة، فإن الفئة تظهر كتوريث متعدد.

روبي لا يدعم التوريث المتعدد مباشرة، ولكن مodule (Module) لروبي لديها وظيفة سحرية أخرى. إنها تقريبًا تزيل الحاجة إلى التوريث المتعدد، وتقدم ما يُدعى mixin النظام.

روبي لم يحقق حقًا ميكانيكية التوريث المتعدد، بل استخدم تقنية mixin كبديل. عند تضمين المodule في تعريف الفئة، يتم دمج طرق المodule في الفئة.

دعونا نرى الشفرة التالية كي نعرف المزيد عن mixin:

مثال على الخطوط

module A
   def a1
   conclusion
   def a2
   conclusion
conclusion
module B
   def b1
   conclusion
   def b2
   conclusion
conclusion
 
class Sample
include A
include B
   def s1
   conclusion
conclusion
 
samp=Sample.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1
  • تتكون مكتبة A من طرق a1 و a2.

  • تتكون مكتبة B من طرق b1 و b2.

  • تتضمن فئة Sample مكتبات A و B.

  • يمكن لفئة Sample الوصول إلى جميع أربع الطرق، وهي a1، a2، b1 و b2.

لذلك، يمكنك رؤية أن فئة Sample ورثت من مكتبتين، يمكنك القول أن فئة Sample تستخدم التوريث المتعدد أو mixin