الفرق بين المراجعتين لصفحة: «Ruby/Struct»

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>Struct</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Ruby Struct يعد استخدام ا...'
 
مراجعة وتدقيق.
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>Struct</code> في روبي}}</noinclude>
<noinclude>{{DISPLAYTITLE:الصنف <code>Struct</code> في روبي}}</noinclude>
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: Ruby Class]]
[[تصنيف: Ruby Struct]]
[[تصنيف: Ruby Struct]]
يُعدُّ استخدام الصنف <code>Struct</code> طريقةً ملائمةً لتجميع مجموعة من الخاصيات (attributes) معًا، باستخدام مداخل (accessor methods) دون الحاجة إلى كتابة صنف جديد.


يعد استخدام الصنف <code>Struct</code> طريقة ملائمة لتجميع عدد من الخاصيات (attributes) معًا، باستخدام المداخل (accessor methods) دون الحاجة إلى كتابة صنف جديد.
يُنشئ الصنف <code>Struct</code> أصنافًا فرعيةً (subclasses) جديدةً تحمل مجموعة من الأعضاء مقرونة بقيمها. لكل عضو يتم إنشاء قارئ (reader method) وكاتب (writer method) مشابهين للتابع <code>[[Ruby/Module/attr_accessor|Module.attr_accessor]]</code>.
 
يُنشئ الصنف <code>Struct</code> أصنافًا فرعية (subclasses) جديدة تحمل مجموعة من الأعضاء مع قيمها. لكل عضو يتم إنشاء تابع قارئ وتابع كاتب مشابهين للتابع <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>.
 
في صفحات التوابع، يشير الوسيط "<code>member</code>" إلى عضو من اعضاء البنية، والذي يكون إما سلسلةً نصيةً مقتبسةً (<code>"name"</code>)، أو [[Ruby/Symbol|رمزًا]] (‎<code>:name</code>).
 
== الثوابت ==
 
=== <code>Tms</code> ===


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


===[[Ruby/Struct/new |<code>new</code>]]===
ينشئ صنفًا فرعيًّا جديدًا أو نسخةً جديدةً من الصنف <code>Struct</code>.


== توابع النسخة العامة ==


==توابع الصنف العامة (Public Class Methods)==
===[[Ruby/Struct/equality_operator |<code>==</code>]]===
===[[Ruby/Struct/new | التابع new]]===
يتحقق إن كان لبنية ما نفس الصنف الفرعي ونفس قيم الأعضاء مقارنةً <nowiki/>[[Ruby/Struct|ببنية]] أخرى.
يُستخدم الشكلان الأولان (انظر فقرة البنية العامة) لإنشاء صنف فرعي جديد من <code>[[Ruby/Struct|Struct]]</code> يحمل الاسم <code>class_name</code>، والذي يمكن أن يحتوي قيمة لكل وسيط <code>member_name</code>.  يمكن استخدام هذا الصنف الفرعي لإنشاء نسخ من ال[[Ruby/Struct|بنية]] مثل أي صنف (<code>[[Ruby/Class|Class]]</code>) آخر.
===<code rel="mw:WikiLink" href="Ruby/Struct/index_operator " title="Ruby/Struct/index operator">[[Ruby/Struct/index_operator |[]]]</code>===
===[[Ruby/Struct/equality_operator | التابع ==]]===
يجلب قيمة عضو البنية المعطى، أو قيمة العضو ذي الفهرس المحدَّد.
معامل التساوي - تُعاد القيمة <code>true</code> إن كان لل[[Ruby/Struct|بنية]] <code>other</code> (انظر فقرة البنية العامة) نفس الصنف الفرعي، وكان لها نفس قيم الأعضاء مقارنة بال[[Ruby/Struct|بنية]] التي استُدعي معها.
===<code rel="mw:WikiLink" href="Ruby/Struct/index_operator-3D " title="Ruby/Struct/index operator-3D">[[Ruby/Struct/5B-5D-3D|[]=]]</code>===
===[[Ruby/Struct/index_operator | التابع []]]===
يضبط عند استدعائه بالشكل <code>struct[member/index] = obj</code> قيمة عضو<nowiki/>[[Ruby/Struct|البنية]] <code>member</code> المعطى أو العضو الموجود عند الفهرس <code>index</code> إلى القيمة <code>obj</code>.
معامل الفهرسة - يُعيد قيمة عضو ال[[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 |<code>dig</code>]]===
===[[Ruby/Struct/index_operator-3D | التابع []=]]===
يستخلص القيمة المتشعبة (nested) المحددة بواسطة تسلسل الكائنات المعطاة عن طريق استدعاء <code>dig</code> في كل خطوة.
معامل التعيين - يضبط قيمة عضو ال[[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/each |<code>each</code>]]===
===[[Ruby/Struct/dig | التابع dig]]===
يعيد قيمة كل عضو من أعضاء البنية بالترتيب.   
يستخلص التابع <code>dig</code> القيمة المتشعبة (nested) المحددة بواسطة تسلسل الكائنات <code>key</code> (انظر فقرة البنية العامة) عن طريق استدعاء <code>dig</code> في كل خطوة، ويُعيد <code>nil</code> إن كانت قيمة أي خطوة وسطية تساوي <code>nil</code>.
===[[Ruby/Struct/each_pair |<code>each_pair</code>]]===
===[[Ruby/Struct/each | التابع each]]===
يعيد اسم وقيمة كل عضو من أعضاء البنية بالترتيب.   
يعيد التابع <code>each</code> قيمة كل عضو من أعضاء ال[[Ruby/Struct|بنية]] بالترتيب.  في حال لم تُعطى أي كتلة، فسيُعاد كائن من الصنف Enumerator بدلاً من ذلك.
===[[Ruby/Struct/eql-3F |<code>eql?‎</code>]]===
===[[Ruby/Struct/each_pair | التابع each_pair]]===
يتحقق التابع <code>eql?‎</code> إن كانت بنيتان تشيران إلى نفس مفتاح الجدول <code>[[Ruby/Hash|Hash]]</code> أي إذا كان لهما نفس صنف <nowiki/>[[Ruby/Struct|البنية]] الفرعي، وكانت قيم أعضائهما متساوية.  
يعيد التابع <code>each_pair</code> اسم وقيمة كل عضو من أعضاء ال[[Ruby/Struct|بنية]] بالترتيب.  في حال لم تُعطى أي كتلة، فسيُعاد كائن من الصنف Enumerator بدلاً من ذلك.
===[[Ruby/Struct/hash |<code>hash</code>]]===
===[[Ruby/Struct/eql-3F | التابع eql?‎]]===
يعيد القيمة hash استنادًا إلى محتويات هذه البنية.
معامل التساوي القاموسي (<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>).
===[[Ruby/Struct/inspect |<code>inspect</code>]]===
===[[Ruby/Struct/hash | التابع hash]]===
يعيد [[Ruby/String|سلسلة نصية]] تحتوي وصفًا لهذه البنية.
يعيد التابع <code>hash</code> قيمة تجزئة (hash value) استنادًا إلى محتويات هذه ال[[Ruby/Struct|بنية]].
===[[Ruby/Struct/length |<code>length</code>]]===
===[[Ruby/Struct/inspect | التابع inspect]]===
يُعيد عدد أعضاء البنية.
يعيد التابع <code>inspect</code> [[Ruby/String|سلسلة نصية]] تحتوي وصفًا لهذه ال[[Ruby/Struct|بنية]].
===[[Ruby/Struct/members |<code>members</code>]]===
===[[Ruby/Struct/length | التابع length]]===
يُعيد أعضاء البنية على هيئة [[Ruby/Array|مصفوفة]] من الرموز.
يُعيد عدد أعضاء ال[[Ruby/Struct|بنية]].
===[[Ruby/Struct/select |<code>select</code>]]===
===[[Ruby/Struct/members | التابع members]]===
يمرر قيم كل أعضاء البنية إلى الكتلة المعطاة ويعيد <nowiki/>[[Ruby/Array|مصفوفة]] تحتوي قيم الأعضاء التي أعادت الكتلة معها القيمة <code>true</code>.
يُعيد أعضاء ال[[Ruby/Struct|بنية]] على هيئة [[Ruby/Array|مصفوفة]] من الرموز:
===[[Ruby/Struct/size |<code>size</code>]]===
===[[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>).
===[[Ruby/Struct/to_a |<code>to_a</code>]]===
===[[Ruby/Struct/size | التابع size]]===
يعيد قيم هذه البنية على هيئة <nowiki/>[[Ruby/Array|مصفوفة]].
يُعيد التابع <code>size</code> عدد أعضاء ال[[Ruby/Struct|بنية]].
===[[Ruby/Struct/to_h |<code>to_h</code>]]===
===[[Ruby/Struct/to_a | التابع to_a]]===
يُعيد [[Ruby/Hash|جدول Hash]] يحوي أسماء وقيم أعضاء البنية.
يعيد التابع <code>to_a</code> قيم هذه ال[[Ruby/Struct|بنية]] على هيئة [[Ruby/Array|مصفوفة]] <code>[[Ruby/Array|Array]]</code>.
===[[Ruby/Struct/to_s |<code>to_s</code>]]===
===[[Ruby/Struct/to_h | التابع to_h]]===
يعيد [[Ruby/String|سلسلة نصية]] تحتوي وصفًا لهذه البنية.
يُعيد التابع <code>to_h</code> [[Ruby/Array|مصفوفة]] <code>[[Ruby/Hash|Hash]]</code> تحتوي أسماء وقيم أعضاء ال[[Ruby/Struct|بنية]].
===[[Ruby/Struct/to_s | التابع to_s]]===


===[[Ruby/Struct/values | التابع values]]===
===[[Ruby/Struct/values |<code>values</code>]]===
يعيد التابع <code>values</code> قيم هذه ال[[Ruby/Struct|بنية]] على هيئة [[Ruby/Array|مصفوفة]] <code>[[Ruby/Array|Array]]</code>.
يعيد قيم هذه البنية على هيئة [[Ruby/Array|مصفوفة]].
===[[Ruby/Struct/values_at | التابع values_at]]===
===[[Ruby/Struct/values_at |<code>values_at</code>]]===
يُعيد التابع <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>).
يُعيد قيم أعضاء البنية المقابلة لكل معامل مُمرَّر إليه على هيئة <nowiki/>[[Ruby/Array|مصفوفة]].   
==مصادر==
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Struct.html قسم  الصنف Struct في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/Struct.html صفحة الصنف Struct في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 08:09، 5 ديسمبر 2018

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

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

الثوابت

Tms

توابع الصنف العامة

new

ينشئ صنفًا فرعيًّا جديدًا أو نسخةً جديدةً من الصنف Struct.

توابع النسخة العامة

==

يتحقق إن كان لبنية ما نفس الصنف الفرعي ونفس قيم الأعضاء مقارنةً ببنية أخرى.

[]

يجلب قيمة عضو البنية المعطى، أو قيمة العضو ذي الفهرس المحدَّد.

‎ []=‎

يضبط عند استدعائه بالشكل struct[member/index] = obj قيمة عضوالبنية member المعطى أو العضو الموجود عند الفهرس index إلى القيمة obj.

dig

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

each

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

each_pair

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

eql?‎

يتحقق التابع eql?‎ إن كانت بنيتان تشيران إلى نفس مفتاح الجدول Hash أي إذا كان لهما نفس صنف البنية الفرعي، وكانت قيم أعضائهما متساوية.

hash

يعيد القيمة hash استنادًا إلى محتويات هذه البنية.

inspect

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

length

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

members

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

select

يمرر قيم كل أعضاء البنية إلى الكتلة المعطاة ويعيد مصفوفة تحتوي قيم الأعضاء التي أعادت الكتلة معها القيمة true.

size

يُعيد عدد أعضاء البنية التي استُدعي معها.

to_a

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

to_h

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

to_s

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

values

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

values_at

يُعيد قيم أعضاء البنية المقابلة لكل معامل مُمرَّر إليه على هيئة مصفوفة.

مصادر