صفحة الصنف Struct في روبي

من موسوعة حسوب
مراجعة 15:03، 4 نوفمبر 2018 بواسطة محمد-بغات (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>Struct</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Ruby Struct يعد استخدام ا...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)


يعد استخدام الصنف Struct طريقة ملائمة لتجميع عدد من الخاصيات (attributes) معًا، باستخدام المداخل (accessor methods) دون الحاجة إلى كتابة صنف جديد.

يُنشئ الصنف Struct أصنافًا فرعية (subclasses) جديدة تحمل مجموعة من الأعضاء مع قيمها. لكل عضو يتم إنشاء تابع قارئ وتابع كاتب مشابهين للتابع Module#attr_accessor.

Customer = Struct.new(:name, :address) do
  def greeting
    "Hello #{name}!"
  end
end
dave = Customer.new("Dave", "123 Main")
dave.name     #=> "Dave"
dave.greeting #=> "Hello Dave!"‎

راجع صفحة التابع ::new للحصول على مزيد من الأمثلة حول إنشاء نسخ (instances) وأصناف فرعية للصنف ووو.

في صفحات التوابع، يشير الوسيط "member" إلى عضو من اعضاء البنية ،و الذي يكون إما سسس مقتبسة ("name") أو رمزًا Symbol (:name).


توابع الصنف العامة (Public Class Methods)

التابع new

يُستخدم الشكلان الأولان (انظر فقرة البنية العامة) لإنشاء صنف فرعي جديد من Struct يحمل الاسم class_name، والذي يمكن أن يحتوي قيمة لكل وسيط member_name. يمكن استخدام هذا الصنف الفرعي لإنشاء نسخ من البنية مثل أي صنف (Class) آخر.

التابع ==

معامل التساوي - تُعاد القيمة true إن كان للبنية other (انظر فقرة البنية العامة) نفس الصنف الفرعي، وكان لها نفس قيم الأعضاء مقارنة بالبنية التي استُدعي معها.

التابع []

معامل الفهرسة - يُعيد قيمة عضو البنية المعطى member (انظر فقرة البنية العامة)، أو العضو ذو الفهرس index. يطلق الاستثناء NameError إن لم يكن member موجودًا، أو الاستثناء IndexError إن كان index خارج النطاق.

التابع []=

معامل التعيين - يضبط قيمة عضو البنية المعطى member (انظر فقرة البنية العامة)، أو العضو الموجود عند الفهرس index. يطلق الاستثناء NameError إن كان member غير موجود، أو الاستثناء IndexError إن كان index خارج النطاق.

التابع dig

يستخلص التابع dig القيمة المتشعبة (nested) المحددة بواسطة تسلسل الكائنات key (انظر فقرة البنية العامة) عن طريق استدعاء dig في كل خطوة، ويُعيد nil إن كانت قيمة أي خطوة وسطية تساوي nil.

التابع each

يعيد التابع each قيمة كل عضو من أعضاء البنية بالترتيب. في حال لم تُعطى أي كتلة، فسيُعاد كائن من الصنف Enumerator بدلاً من ذلك.

التابع each_pair

يعيد التابع each_pair اسم وقيمة كل عضو من أعضاء البنية بالترتيب. في حال لم تُعطى أي كتلة، فسيُعاد كائن من الصنف Enumerator بدلاً من ذلك.

التابع eql?‎

معامل التساوي القاموسي (HashX) - يشير الوسيط المعطى other (انظر فقرة البنية العامة) والبنية التي استُدعي معها struct إلى نفي القاموس إذا كان لهما نفس صنف البنية الفرعي، وكانت قيم أعضائهما متساوية (وفقًا للتابع Object#eql?).

التابع hash

يعيد التابع hash قيمة تجزئة (hash value) استنادًا إلى محتويات هذه البنية.

التابع inspect

يعيد التابع inspect سلسلة نصية تحتوي وصفًا لهذه البنية.

التابع length

يُعيد عدد أعضاء البنية.

التابع members

يُعيد أعضاء البنية على هيئة مصفوفة من الرموز:

التابع select

يمرر التابع select قيم كل أعضاء البنية إلى الكتلة ويعيد مصفوفة Array تحتوي قيم الأعضاء البنية من struct التي تعيد عند تمريرها إلى الكتلة المعطاة القيمة true (تكافئ Enumerable#select).

التابع size

يُعيد التابع size عدد أعضاء البنية.

التابع to_a

يعيد التابع to_a قيم هذه البنية على هيئة مصفوفة Array.

التابع to_h

يُعيد التابع to_h مصفوفة Hash تحتوي أسماء وقيم أعضاء البنية.

التابع to_s

التابع values

يعيد التابع values قيم هذه البنية على هيئة مصفوفة Array.

التابع values_at

يُعيد التابع values_at قيم أعضاء البنية لكل وسيط selector (انظر فقرة البنية العامة) على هيئة مصفوفة Array. قد يكون الوسيط selector إما موضعًا Integer أو مجالًا من المواضع Range (كما في Array#values_at).

مصادر