الفرق بين المراجعتين ل"Ruby/Struct"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>Struct</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Ruby Struct يعد استخدام ا...')
 
سطر 3: سطر 3:
 
[[تصنيف: Ruby Struct]]
 
[[تصنيف: Ruby Struct]]
  
يعد استخدام الصنف <code>Struct</code> طريقة ملائمة لتجميع عدد من الخاصيات (attributes) معًا، باستخدام المداخل (accessor methods) دون الحاجة إلى كتابة صنف جديد.
+
يُعد استخدام الصنف <code>Struct</code> طريقة ملائمة لتجميع مجموعة من الخاصيات (attributes) معًا، باستخدام مداخل (accessor methods) دون الحاجة إلى كتابة صنف جديد.
  
يُنشئ الصنف <code>Struct</code> أصنافًا فرعية (subclasses) جديدة تحمل مجموعة من الأعضاء مع قيمها.  لكل عضو يتم إنشاء تابع قارئ وتابع كاتب مشابهين للتابع <code>[[Ruby/Module/attr_accessor|Module#attr_accessor]]</code>.
+
يُنشئ الصنف <code>Struct</code> أصنافًا فرعية (subclasses) جديدة تحمل مجموعة من الأعضاء مقرونة بقيمها.  لكل عضو يتم إنشاء قارئ (method reader) وكاتب (writer method) مشابهين للتابع <code>[[Ruby/Module/attr_accessor|Module#attr_accessor]]</code>.
 
<syntaxhighlight lang="ruby">Customer = Struct.new(:name, :address) do
 
<syntaxhighlight lang="ruby">Customer = Struct.new(:name, :address) do
 
   def greeting
 
   def greeting
سطر 14: سطر 14:
 
dave.name    #=> "Dave"
 
dave.name    #=> "Dave"
 
dave.greeting #=> "Hello Dave!"‎</syntaxhighlight>
 
dave.greeting #=> "Hello Dave!"‎</syntaxhighlight>
راجع صفحة التابع <code>[[Ruby/Struct/new|::new]]</code> للحصول على مزيد من الأمثلة حول إنشاء نسخ (instances) وأصناف فرعية للصنف ووو.
+
راجع صفحة التابع <code>[[Ruby/Struct/new|new]]</code> للحصول على مزيد من الأمثلة حول إنشاء نسخ (instances) وأصناف فرعية للصنف <code>Struct</code>.
  
في صفحات التوابع، يشير الوسيط "member" إلى عضو من اعضاء البنية ،و الذي يكون إما سسس مقتبسة (<code>"name"</code>) أو رمزًا <code>[[Ruby/Symbol|Symbol]]</code> (<code>:name</code>).
+
في صفحات التوابع، يشير الوسيط "<code>member</code>" إلى عضو من اعضاء البنية، و الذي يكون إما سلسلة نصية مقتبسة (<code>"name"</code>)، أو [[Ruby/Symbol|رمزًا]] (<code>:name</code>).
  
 +
== توابع الصنف العامة (Public Class Methods) ==
  
 +
===[[Ruby/Struct/new | التابع new]]===
 +
ينشئ كائن <code>Struct</code> جديد.
 +
 +
== توابع النسخ العامة (Public Instance Methods) ==
  
==توابع الصنف العامة (Public Class Methods)==
 
===[[Ruby/Struct/new | التابع new]]===
 
يُستخدم الشكلان الأولان (انظر فقرة البنية العامة) لإنشاء صنف فرعي جديد من <code>[[Ruby/Struct|Struct]]</code> يحمل الاسم <code>class_name</code>، والذي يمكن أن يحتوي قيمة لكل وسيط <code>member_name</code>.  يمكن استخدام هذا الصنف الفرعي لإنشاء نسخ من ال[[Ruby/Struct|بنية]] مثل أي صنف (<code>[[Ruby/Class|Class]]</code>) آخر.
 
 
===[[Ruby/Struct/equality_operator | التابع ==]]===
 
===[[Ruby/Struct/equality_operator | التابع ==]]===
معامل التساوي - تُعاد القيمة <code>true</code> إن كان لل[[Ruby/Struct|بنية]] <code>other</code> (انظر فقرة البنية العامة) نفس الصنف الفرعي، وكان لها نفس قيم الأعضاء مقارنة بال[[Ruby/Struct|بنية]] التي استُدعي معها.
+
معامل التساوي.
 
===[[Ruby/Struct/index_operator | التابع []]]===
 
===[[Ruby/Struct/index_operator | التابع []]]===
معامل الفهرسة - يُعيد قيمة عضو ال[[Ruby/Struct|بنية]] المعطى <code>member</code> (انظر فقرة البنية العامة)، أو العضو ذو الفهرس <code>index</code>.  يطلق الاستثناء <code>[[Ruby/NameError|NameError]]</code> إن لم يكن <code>member</code> موجودًا، أو الاستثناء <code>[[Ruby/IndexError|IndexError]]</code> إن كان <code>index</code> خارج النطاق.
+
معامل الفهرسة.
===[[Ruby/Struct/index_operator-3D | التابع []=]]===
+
===[[Ruby/Struct/index_operator-3D | التابع []=]]===
معامل التعيين - يضبط قيمة عضو ال[[Ruby/Struct|بنية]] المعطى <code>member</code> (انظر فقرة البنية العامة)، أو العضو الموجود عند الفهرس <code>index</code>.  يطلق الاستثناء <code>[[Ruby/NameError|NameError]]</code> إن كان <code>member</code> غير موجود، أو الاستثناء <code>[[Ruby/IndexError|IndexError]]</code> إن كان <code>index</code> خارج النطاق.
+
معامل التعيين.
 
===[[Ruby/Struct/dig | التابع dig]]===
 
===[[Ruby/Struct/dig | التابع dig]]===
يستخلص التابع <code>dig</code> القيمة المتشعبة (nested) المحددة بواسطة تسلسل الكائنات <code>key</code> (انظر فقرة البنية العامة) عن طريق استدعاء <code>dig</code> في كل خطوة، ويُعيد <code>nil</code> إن كانت قيمة أي خطوة وسطية تساوي <code>nil</code>.
+
يستخلص التابع <code>dig</code> القيمة المتشعبة (nested) المحددة بواسطة تسلسل الكائنات <code>key</code>عن طريق استدعاء <code>dig</code> في كل خطوة،
 
===[[Ruby/Struct/each | التابع each]]===
 
===[[Ruby/Struct/each | التابع each]]===
يعيد التابع <code>each</code> قيمة كل عضو من أعضاء ال[[Ruby/Struct|بنية]] بالترتيب.  في حال لم تُعطى أي كتلة، فسيُعاد كائن من الصنف Enumerator بدلاً من ذلك.
+
يعيد التابع <code>each</code> قيمة كل عضو من أعضاء ال[[Ruby/Struct|بنية]] بالترتيب.   
 
===[[Ruby/Struct/each_pair | التابع each_pair]]===
 
===[[Ruby/Struct/each_pair | التابع each_pair]]===
يعيد التابع <code>each_pair</code> اسم وقيمة كل عضو من أعضاء ال[[Ruby/Struct|بنية]] بالترتيب.  في حال لم تُعطى أي كتلة، فسيُعاد كائن من الصنف Enumerator بدلاً من ذلك.
+
يعيد التابع <code>each_pair</code> اسم وقيمة كل عضو من أعضاء ال[[Ruby/Struct|بنية]] بالترتيب.   
 
===[[Ruby/Struct/eql-3F | التابع eql?‎]]===
 
===[[Ruby/Struct/eql-3F | التابع eql?‎]]===
معامل التساوي القاموسي (<code>[[Ruby/Hash|Hash]]</code>X) - يشير الوسيط المعطى <code>other</code> (انظر فقرة البنية العامة) وال[[Ruby/Struct|بنية]] التي استُدعي معها <code>struct</code> إلى نفي ال[[Ruby/Hash|قاموس]] إذا كان لهما نفس صنف ال[[Ruby/Struct|بنية]] الفرعي، وكانت قيم أعضائهما متساوية (وفقًا للتابع <code>[[Ruby/Object/eql-3F|Object#eql?]]</code>).
+
معامل التساوي القاموسي (<code>[[Ruby/Hash|Hash]]</code>)  
 
===[[Ruby/Struct/hash | التابع hash]]===
 
===[[Ruby/Struct/hash | التابع hash]]===
 
يعيد التابع <code>hash</code> قيمة تجزئة (hash value) استنادًا إلى محتويات هذه ال[[Ruby/Struct|بنية]].
 
يعيد التابع <code>hash</code> قيمة تجزئة (hash value) استنادًا إلى محتويات هذه ال[[Ruby/Struct|بنية]].
سطر 46: سطر 48:
 
يُعيد أعضاء ال[[Ruby/Struct|بنية]] على هيئة [[Ruby/Array|مصفوفة]] من الرموز:
 
يُعيد أعضاء ال[[Ruby/Struct|بنية]] على هيئة [[Ruby/Array|مصفوفة]] من الرموز:
 
===[[Ruby/Struct/select | التابع select]]===
 
===[[Ruby/Struct/select | التابع select]]===
يمرر التابع <code>select</code> قيم كل أعضاء ال[[Ruby/Struct|بنية]] إلى الكتلة ويعيد [[Ruby/Array|مصفوفة]] <code>[[Ruby/Array|Array]]</code> تحتوي قيم الأعضاء ال[[Ruby/Struct|بنية]] من <code>struct</code> التي تعيد عند تمريرها إلى الكتلة المعطاة القيمة true (تكافئ <code>[[Ruby/Enumerable/select|Enumerable#select]]</code>).
+
يمرر التابع <code>select</code> قيم كل أعضاء ال[[Ruby/Struct|بنية]] إلى الكتلة ويعيد [[Ruby/Array|مصفوفة]] تحتوي قيم الأعضاء ال[[Ruby/Struct|بنية]] من <code>struct</code> التي تعيد عند تمريرها إلى الكتلة المعطاة القيمة <code>true</code> (تكافئ <code>[[Ruby/Enumerable/select|Enumerable#select]]</code>).
 
===[[Ruby/Struct/size | التابع size]]===
 
===[[Ruby/Struct/size | التابع size]]===
 
يُعيد التابع <code>size</code> عدد أعضاء ال[[Ruby/Struct|بنية]].
 
يُعيد التابع <code>size</code> عدد أعضاء ال[[Ruby/Struct|بنية]].
سطر 52: سطر 54:
 
يعيد التابع <code>to_a</code> قيم هذه ال[[Ruby/Struct|بنية]] على هيئة [[Ruby/Array|مصفوفة]] <code>[[Ruby/Array|Array]]</code>.
 
يعيد التابع <code>to_a</code> قيم هذه ال[[Ruby/Struct|بنية]] على هيئة [[Ruby/Array|مصفوفة]] <code>[[Ruby/Array|Array]]</code>.
 
===[[Ruby/Struct/to_h | التابع to_h]]===
 
===[[Ruby/Struct/to_h | التابع to_h]]===
يُعيد التابع <code>to_h</code> [[Ruby/Array|مصفوفة]] <code>[[Ruby/Hash|Hash]]</code> تحتوي أسماء وقيم أعضاء ال[[Ruby/Struct|بنية]].
+
يُعيد التابع <code>to_h</code> [[Ruby/Hash|قاموسا]] يحتوي أسماء وقيم أعضاء ال[[Ruby/Struct|بنية]].
 
===[[Ruby/Struct/to_s | التابع to_s]]===
 
===[[Ruby/Struct/to_s | التابع to_s]]===
 +
يعيد  [[Ruby/String|سلسلة نصية]] تحتوي وصفًا لهذه ال[[Ruby/Struct|بنية]].
  
 
===[[Ruby/Struct/values | التابع values]]===
 
===[[Ruby/Struct/values | التابع values]]===
يعيد التابع <code>values</code> قيم هذه ال[[Ruby/Struct|بنية]] على هيئة [[Ruby/Array|مصفوفة]] <code>[[Ruby/Array|Array]]</code>.
+
يعيد التابع <code>values</code> قيم هذه ال[[Ruby/Struct|بنية]] على هيئة [[Ruby/Array|مصفوفة]].
 
===[[Ruby/Struct/values_at | التابع values_at]]===
 
===[[Ruby/Struct/values_at | التابع values_at]]===
يُعيد التابع <code>values_at</code> قيم أعضاء ال[[Ruby/Struct|بنية]] لكل وسيط <code>selector</code> (انظر فقرة البنية العامة) على هيئة [[Ruby/Array|مصفوفة]] <code>[[Ruby/Array|Array]]</code>قد يكون الوسيط <code>selector</code> إما موضعًا <code>[[Ruby/Integer|Integer]]</code> أو مجالًا من المواضع <code>[[Ruby/Range|Range]]</code> (كما في <code>[[Ruby/Array/values_at|Array#values_at]]</code>).
+
يُعيد التابع <code>values_at</code> قيم أعضاء ال[[Ruby/Struct|بنية]] لكل وسيط <code>selector</code> على هيئة [[Ruby/Array|مصفوفة]].   
 
==مصادر==
 
==مصادر==
 
*[http://ruby-doc.org/core-2.5.1/Struct.html قسم  الصنف Struct في توثيق روبي الرسمي.]
 
*[http://ruby-doc.org/core-2.5.1/Struct.html قسم  الصنف Struct في توثيق روبي الرسمي.]

مراجعة 15:13، 4 نوفمبر 2018


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

يُنشئ الصنف Struct أصنافًا فرعية (subclasses) جديدة تحمل مجموعة من الأعضاء مقرونة بقيمها. لكل عضو يتم إنشاء قارئ (method reader) وكاتب (writer method) مشابهين للتابع 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) وأصناف فرعية للصنف Struct.

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

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

التابع new

ينشئ كائن Struct جديد.

توابع النسخ العامة (Public Instance Methods)

التابع ==

معامل التساوي.

التابع []

معامل الفهرسة.

التابع ‎ []=‎

معامل التعيين.

التابع dig

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

التابع each

يعيد التابع each قيمة كل عضو من أعضاء البنية بالترتيب.

التابع each_pair

يعيد التابع each_pair اسم وقيمة كل عضو من أعضاء البنية بالترتيب.

التابع eql?‎

معامل التساوي القاموسي (Hash)

التابع hash

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

التابع inspect

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

التابع length

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

التابع members

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

التابع select

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

التابع size

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

التابع to_a

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

التابع to_h

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

التابع to_s

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

التابع values

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

التابع values_at

يُعيد التابع values_at قيم أعضاء البنية لكل وسيط selector على هيئة مصفوفة.

مصادر