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

من موسوعة حسوب
< Ruby‏ | Struct
لا ملخص تعديل
لا ملخص تعديل
سطر 3: سطر 3:
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Struct]]
[[تصنيف: Ruby Struct]]
يُستخدم الشكلان الأولان (انظر فقرة البنية العامة) لإنشاء صنف فرعي جديد من <code>[[Ruby/Struct|Struct]]</code> يحمل الاسم <code>class_name</code>، والذي يمكن أن يحتوي قيمة لكل وسيط <code>member_name</code>.  يمكن استخدام هذا الصنف الفرعي لإنشاء نسخ من ال[[Ruby/Struct|بنية]] مثل أي صنف (<code>[[Ruby/Class|Class]]</code>) آخر.
يُستخدم الشكلان الأولان (انظر فقرة البنية العامة) لإنشاء صنف فرعي جديد من <code>[[Ruby/Struct|Struct]]</code> يحمل الاسم <code>class_name</code>، والذي يمكن أن يحتوي قيمة مقابل كل وسيط <code>member_name</code>.  يمكن استخدام هذا الصنف الفرعي لإنشاء نسخ من ال[[Ruby/Struct|بنية]] مثل أي صنف آخر.


إذا لم يُعط الوسيط <code>class_name</code>، فستُنشؤ [[Ruby/Struct|بنية]] مجهولة. وبخلاف ذلك، سيظهر اسم هذه البنية كثابتة في ال[[Ruby/Struct|بنية]] <code>[[Ruby/Struct|Struct]]</code> ، لذلك يجب أن يكون فريدًا في جميع ال[[Ruby/Struct|بنية]]ات المٌعرّفة في النظام، ويجب أن يبدأ بحرف كبير. إحالة (Assigning) [[Ruby/Struct|بنية]] إلى ثابت سيؤدي إلى اعتماد ال[[Ruby/Struct|بنية]] اسم الثابت كاسم لها.
إذا لم يُعط الوسيط <code>class_name</code>، فستُنشؤ [[Ruby/Struct|بنية]] مجهولة ()anonymous structure. وبخلاف ذلك، سيظهر اسم هذه البنية كثابتة في ال[[Ruby/Struct|بنية]] ، لذلك يجب أن يكون فريدًا في جميع ال[[Ruby/Struct|بني]]ات المٌعرّفة في النظام، ويجب أن يبدأ بحرف كبير. إحالة (Assigning) [[Ruby/Struct|بنية]] إلى ثابت سيؤدي إلى اعتماد ال[[Ruby/Struct|بنية]] اسم الثابت كاسم لها.<syntaxhighlight lang="ruby">
# Create a structure with a name under Struct
Struct.new("Customer", :name, :address)
#=> Struct::Customer
Struct::Customer.new("Dave", "123 Main")
#=> #<struct Struct::Customer name="Dave", address="123 Main">


# Create a structure named by its constant
Customer = Struct.new(:name, :address)
#=> Customer
Customer.new("Dave", "123 Main")
#=> #<struct Customer name="Dave", address="123 Main">
</syntaxhighlight>إذا أعطي الوسيط الاختياري <code>keyword_init</code> القيمة <code>true</code>، فسيأخذ التابع <code>new</code> وسائط مسماة (keyword arguments) بدلاً من الوسائط العادية.<syntaxhighlight lang="ruby">
Customer = Struct.new(:name, :address, keyword_init: true)
Customer.new(name: "Dave", address: "123 Main")
#=> #<struct Customer name="Dave", address="123 Main">
</syntaxhighlight>إذا تم إعطاء كتلة، فسيتم تقييمها في سياق البنية، وسيُمرّر إليها الصنف الذي تم إنشاؤه كوسيط: <syntaxhighlight lang="ruby">
Customer = Struct.new(:name, :address) do
  def greeting
    "Hello #{name}!"
  end
end
Customer.new("Dave", "123 Main").greeting  #=> "Hello Dave!"
</syntaxhighlight>هذه هي الطريقة الموصى بها لتخصيص ال[[Ruby/Struct|بنيات]]. حيث تؤدي الأصناف الفرعية أو المجهولة لل[[Ruby/Struct|بنية]] إلى إنشاء أصناف مجهولة إضافية، والتي لن يتم استخدامها.


الشكلان الأخيران (انظر فقرة البنية العامة) يُنشئان نسخة جديدة من صنف فرعي لـ<code>[[Ruby/Struct|Struct]]</code>.  يجب أن يكون عدد وسائط <code>value</code> المعطاة أصغر من أو يساوي عدد الخاصيات المعرّفة في ال[[Ruby/Struct|بنية]]. 


إذا مُرٍّر إلى الوسيط الاختياري <code>keyword_init</code> القيمة <code>true</code>، فسيأخذ التابع new وسائط مسماة (keyword arguments) بدلاً من الوسائط العادية.
القيمة الافتراضية للوسائط غير المعينة هي <code>nil</code>. وإن كان عدد الوسائط المُمررة أكثر من عدد الخاصيات فسيُطلق الاستثناء <code>[[Ruby/ArgumentError|ArgumentError]]</code>.
 
 
 
إذا تم إعطاء كتلة سيتم تقييمها في سياق <code>StructClass</code>، وسيُمرّر إليها الصنف الذي تم إنشاؤه كوسيط:
 
 
 
هذه هي الطريقة الموصى بها لتخصيص ال[[Ruby/Struct|بنية]].  تؤدي الأصناف الفرعية أو المجهولة لل[[Ruby/Struct|بنية]] إلى إنشاء أصناف مجهولة إضافية، والتي لن يتم استخدامها.
 
الشكلان الأخيران (انظر فقرة البنية العامة) الأخيرين ينشئان نسخة جديدة من صنف فرعي للصنف <code>[[Ruby/Struct|Struct]]</code>.  يجب أن يكون عدد الوسائط <code>value</code> أصغر من أو يساوي عدد الخاصيات المعرّفة في ال[[Ruby/Struct|بنية]].  القيمة الافتراضية للوسائط غير المعينة هي <code>nil</code>. إن كان عدد الوسائط المُمررة أكثر من عدد الخاصيات فسيُطلق الاستثناء <code>[[Ruby/ArgumentError|ArgumentError]]</code>.
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="ruby">new([class_name] [, member_name]+)→ StructClass
<syntaxhighlight lang="ruby">new([class_name] [, member_name]+)→ StructClass
سطر 28: سطر 41:
==المعاملات==
==المعاملات==
===<code>class_name‎</code>===
===<code>class_name‎</code>===
===<code>member_name+‎</code>===
اسم البنية.
===<code>keyword_init: true‎</code>===
 
===<code>member_name</code>===
اسم العضو.
 
===<code>keyword_init</code>===
إذا أعطي هذا الوسيط  القيمة <code>true</code>، فسيأخذ التابع <code>new</code> وسائط مسماة (keyword arguments) بدلاً من الوسائط العادية.
 
===<code>value‎</code>===
===<code>value‎</code>===
===<code>...‎</code>===
قيمة.
 
==القيمة المُعادة==
==القيمة المُعادة==
يعيد التابع <code>new</code> [[Ruby/Struct|بنية]] جديدة.
==أمثلة==
==أمثلة==
مثال على استخدام التابع <code>new‎</code>:
مثال على استخدام التابع <code>new‎</code>:
<syntaxhighlight lang="ruby"># Create a structure with a name under Struct
<syntaxhighlight lang="ruby">Customer = Struct.new(:name, :address)
Struct.new("Customer", :name, :address)
#=> Struct::Customer
Struct::Customer.new("Dave", "123 Main")
#=> #<struct Struct::Customer name="Dave", address="123 Main">
# Create a structure named by its constant
Customer = Struct.new(:name, :address)
#=> Customer
Customer.new("Dave", "123 Main")
Customer.new("Dave", "123 Main")
#=> #<struct Customer name="Dave", address="123 Main"></syntaxhighlight>
#=> #<struct Customer name="Dave", address="123 Main">
Customer["Dave"]
#=> #<struct Customer name="Dave", address=nil></syntaxhighlight>
==انظر أيضا==
==انظر أيضا==
* التابع <code>[[Ruby/Struct/equality_operator|==]]</code>: معامل التساوي - تُعاد القيمة <code>true</code> إن كان لل[[Ruby/Struct|بنية]] <code>other</code> (انظر فقرة البنية العامة) نفس الصنف الفرعي، وكان لها نفس قيم الأعضاء مقارنة بال[[Ruby/Struct|بنية]] التي استُدعي معها.
* صفحة [[Ruby/Struct|البنيات]].
==مصادر==
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Struct.html#method-c-new قسم  التابع new‎ في الصنف Struct‎ في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/Struct.html#method-c-new قسم  التابع new‎ في الصنف Struct‎ في توثيق روبي الرسمي.]

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

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

إذا لم يُعط الوسيط class_name، فستُنشؤ بنية مجهولة ()anonymous structure. وبخلاف ذلك، سيظهر اسم هذه البنية كثابتة في البنية ، لذلك يجب أن يكون فريدًا في جميع البنيات المٌعرّفة في النظام، ويجب أن يبدأ بحرف كبير. إحالة (Assigning) بنية إلى ثابت سيؤدي إلى اعتماد البنية اسم الثابت كاسم لها.

# Create a structure with a name under Struct
Struct.new("Customer", :name, :address)
#=> Struct::Customer
Struct::Customer.new("Dave", "123 Main")
#=> #<struct Struct::Customer name="Dave", address="123 Main">

# Create a structure named by its constant
Customer = Struct.new(:name, :address)
#=> Customer
Customer.new("Dave", "123 Main")
#=> #<struct Customer name="Dave", address="123 Main">

إذا أعطي الوسيط الاختياري keyword_init القيمة true، فسيأخذ التابع new وسائط مسماة (keyword arguments) بدلاً من الوسائط العادية.

Customer = Struct.new(:name, :address, keyword_init: true)
Customer.new(name: "Dave", address: "123 Main")
#=> #<struct Customer name="Dave", address="123 Main">

إذا تم إعطاء كتلة، فسيتم تقييمها في سياق البنية، وسيُمرّر إليها الصنف الذي تم إنشاؤه كوسيط:

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

هذه هي الطريقة الموصى بها لتخصيص البنيات. حيث تؤدي الأصناف الفرعية أو المجهولة للبنية إلى إنشاء أصناف مجهولة إضافية، والتي لن يتم استخدامها.

الشكلان الأخيران (انظر فقرة البنية العامة) يُنشئان نسخة جديدة من صنف فرعي لـStruct. يجب أن يكون عدد وسائط value المعطاة أصغر من أو يساوي عدد الخاصيات المعرّفة في البنية.

القيمة الافتراضية للوسائط غير المعينة هي nil. وإن كان عدد الوسائط المُمررة أكثر من عدد الخاصيات فسيُطلق الاستثناء ArgumentError.

البنية العامة

new([class_name] [, member_name]+) StructClass
new([class_name] [, member_name]+, keyword_init: true)  StructClass
new([class_name] [, member_name]+) {|StructClass| block }  StructClass
new(value, ...)   object
StructClass[value, ...] object

المعاملات

class_name‎

اسم البنية.

member_name

اسم العضو.

keyword_init

إذا أعطي هذا الوسيط القيمة true، فسيأخذ التابع new وسائط مسماة (keyword arguments) بدلاً من الوسائط العادية.

value‎

قيمة.

القيمة المُعادة

يعيد التابع new بنية جديدة.

أمثلة

مثال على استخدام التابع new‎:

Customer = Struct.new(:name, :address)
Customer.new("Dave", "123 Main")
#=> #<struct Customer name="Dave", address="123 Main">
Customer["Dave"]
#=> #<struct Customer name="Dave", address=nil>

انظر أيضا

مصادر