الفرق بين المراجعتين لصفحة: «Ruby/Class»
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 58: | سطر 58: | ||
== توابع الكائن الخاصة (Public Instance Methods) == | == توابع الكائن الخاصة (Public Instance Methods) == | ||
===[[Ruby/Class/allocate | التابع <code>allocate</code> في الصنف <code>Class</code> ]]=== | |||
يحجز التابع <code>allocate</code> مساحةً من الذاكرة لكائن جديد من الصنف <code>class</code> دون استدعاء التابع <code>initialize</code> مع النسخة (<code>instance</code>) الجديدة. يجب أن يكون الكائن المُعاد نسخةً من الصنف <code>class</code>. | |||
===[[Ruby/Class/inherited | التابع <code>inherited</code> في الصنف <code>Class</code> ]]=== | |||
يُستدعَى التابع <code>inherited</code> كرد نداء في كل مرة يُنشأ فيها صنف فرعي (<code>subclass</code>) من الصنف الحالي. | |||
===[[Ruby/Class/new | التابع <code>new</code> في الصنف <code>Class</code> ]]=== | |||
يستدعي التابع <code>new</code> التابعَ [[Ruby/Class/allocate | <code>allocate</code>]] لإنشاء كائن جديد من الصنف <code>class</code>، ثم يستدعي التابع <code>initialize</code> مع ذلك الكائن المنشأ ويُمرِّر إليه وسائط محددة. | |||
هذا هو التابع الذي يُستدعى كلما أريد إنشاء كائن باستخدام التابع .<code>new</code>.[<code>a</code>] | |||
===[[Ruby/Class/superclass | التابع <code>superclass</code> في الصنف <code>Class</code> ]]=== | |||
يعيد التابع <code>superclass</code> الصنف الأب (<code>superclass</code>) للصنف المستدعى معه. | |||
===[[Ruby/Class/_new | التابع <code>new</code> في الصنف <code>Class</code> ]]=== | |||
يُنشئ التابع [[Ruby/Class/new | <code>new</code>]] صنفًا جديدًا مجهولًا غير مسمى (<code>unnamed</code>) من الصنف الأب ([[Ruby/Class/superclass | <code>superclass</code>]]) الممرر إليه (أو من الصنف <code>Object</code> إن لم يمرر إليه أي شيء). يمكن إعطاء صنف ما اسمًا عن طريق تعيين كائن الصنف[<code>a</code>][<code>b</code>] (<code>class</code> <code>object</code>) وإعطائه قيمة ثابتة. | |||
إن أعطيت كتلة برمجية، فسيُمرَّر إليها كائن الصنف (<code>class</code> <code>object</code>)، وستقدَّر الكتلة في سياق ذلك الصنف كما هو الحال مع <code>class_eval</code>. | |||
عيِّن الصنف وأعطه قيمة ثابتة (يبدأ الاسم بأحرف كبيرة) إذا كنت تريد معاملته كصنف اعتيادي. | |||
== مصادر == | == مصادر == | ||
* [http://ruby-doc.org/core-2.5.1/Class.html صفحة الصنف Class في توثيق روبي الرسمي.] | * [http://ruby-doc.org/core-2.5.1/Class.html صفحة الصنف Class في توثيق روبي الرسمي.] |
مراجعة 14:33، 12 سبتمبر 2018
تُعدُّ الأصناف كائناتٍ من الدرجة الأولى (first-class objects) في روبي، وتعدُّ جميعها نُسخٌ من الصنف Class
.
يمكن عادةً إنشاء صنف جديد بالشكل التالي:
class Name
# تكتب هنا الشيفرة التي تعرف سلوك الصنف
end
عندما يُنشَأ صنف جديد، يهيَّأ كائن من النوع Class ويسند إلى ثابت عام (global constant) (هو Name في المثال السابق). عند استدعاء Name.new لإنشاء كائن جديد، يُنفَّذ التابع new الخاص بالصنف Class بشكل افتراضي. يمكن إثبات ذلك من خلال إعادة تعريف التابع new في الصنف Class:
class Class
alias old_new new
def new(*args)
print "Creating a new ", self.name, "\n"
old_new(*args)
end
end
class Name
end
n = Name.new
ناتج تنفيذ الشيفرة السابقة هو:
Creating a new Name
تكون الأصناف والوحدات (modules) والكائنات مترابطةً مع بعضها بعضًا. في الرسم التوضيحي التالي، تمثل الأسهم الرأسية الوراثة (inheritance)، أما الأقواس فتمثل الأصناف metaclass
. وجميع الأصناف metaclass
هي نُسخ (instances) من الصنف Class
.
+---------+ +-...
| | |
BasicObject-----|-->(BasicObject)-------|-...
^ | ^ |
| | | |
Object---------|----->(Object)---------|-...
^ | ^ |
| | | |
+-------+ | +--------+ |
| | | | | |
| Module-|---------|--->(Module)-|-...
| ^ | | ^ |
| | | | | |
| Class-|---------|---->(Class)-|-...
| ^ | | ^ |
| +---+ | +----+
| |
obj--->OtherClass---------->(OtherClass)-----------...
توابع الصنف العامة (Public Class Methods)
توابع الكائن الخاصة (Public Instance Methods)
التابع allocate
في الصنف Class
يحجز التابع allocate
مساحةً من الذاكرة لكائن جديد من الصنف class
دون استدعاء التابع initialize
مع النسخة (instance
) الجديدة. يجب أن يكون الكائن المُعاد نسخةً من الصنف class
.
التابع inherited
في الصنف Class
يُستدعَى التابع inherited
كرد نداء في كل مرة يُنشأ فيها صنف فرعي (subclass
) من الصنف الحالي.
التابع new
في الصنف Class
يستدعي التابع new
التابعَ allocate
لإنشاء كائن جديد من الصنف class
، ثم يستدعي التابع initialize
مع ذلك الكائن المنشأ ويُمرِّر إليه وسائط محددة.
هذا هو التابع الذي يُستدعى كلما أريد إنشاء كائن باستخدام التابع .new
.[a
]
التابع superclass
في الصنف Class
يعيد التابع superclass
الصنف الأب (superclass
) للصنف المستدعى معه.
التابع new
في الصنف Class
يُنشئ التابع new
صنفًا جديدًا مجهولًا غير مسمى (unnamed
) من الصنف الأب ( superclass
) الممرر إليه (أو من الصنف Object
إن لم يمرر إليه أي شيء). يمكن إعطاء صنف ما اسمًا عن طريق تعيين كائن الصنف[a
][b
] (class
object
) وإعطائه قيمة ثابتة.
إن أعطيت كتلة برمجية، فسيُمرَّر إليها كائن الصنف (class
object
)، وستقدَّر الكتلة في سياق ذلك الصنف كما هو الحال مع class_eval
.
عيِّن الصنف وأعطه قيمة ثابتة (يبدأ الاسم بأحرف كبيرة) إذا كنت تريد معاملته كصنف اعتيادي.