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

من موسوعة حسوب
< Ruby‏ | Struct
اذهب إلى التنقل اذهب إلى البحث
ط (مراجعة وتدقيق.)
 
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: التابع <code>new‎</code> الخاص بالصنف <code>Struct</code> في روبي}}</noinclude>
+
<noinclude>{{DISPLAYTITLE: التابع <code>Struct.new‎</code> في روبي}}</noinclude>
 
[[تصنيف: Ruby]]
 
[[تصنيف: Ruby]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Struct]]
 
[[تصنيف: Ruby Struct]]
يُستخدم الشكلان الأولان (انظر فقرة البنية العامة) لإنشاء صنف فرعي جديد من <code>[[Ruby/Struct|Struct]]</code> يحمل الاسم <code>class_name</code>، والذي يمكن أن يحتوي قيمة مقابل كل وسيط <code>member_name</code>.  يمكن استخدام هذا الصنف الفرعي لإنشاء نسخ من ال[[Ruby/Struct|بنية]] مثل أي صنف آخر.
+
ينشئ التابع <code>new</code> صنفًا فرعيًّا جديدًا أو نسخةً جديدةً من الصنف <code>[[Ruby/Struct|Struct]]</code>.
 +
==البنية العامة==
 +
<syntaxhighlight lang="ruby">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‎</syntaxhighlight>يُستخدم الشكلان الأولان من التابع <code>new</code> لإنشاء صنف فرعي جديد من <code>[[Ruby/Struct|Struct]]</code> يحمل الاسم <code>class_name</code>، والذي يمكن أن يحتوي قيمةً مقابل كل وسيط <code>member_name</code>.  يمكن استخدام هذا الصنف الفرعي لإنشاء نسخ من ال[[Ruby/Struct|بنية]] مثل أي صنف آخر.
  
إذا لم يُعط الوسيط <code>class_name</code>، فستُنشؤ [[Ruby/Struct|بنية]] مجهولة ()anonymous structure. وبخلاف ذلك، سيظهر اسم هذه البنية كثابتة في ال[[Ruby/Struct|بنية]] ، لذلك يجب أن يكون فريدًا في جميع ال[[Ruby/Struct|بني]]ات المٌعرّفة في النظام، ويجب أن يبدأ بحرف كبير. إحالة (Assigning) [[Ruby/Struct|بنية]] إلى ثابت سيؤدي إلى اعتماد ال[[Ruby/Struct|بنية]] اسم الثابت كاسم لها.<syntaxhighlight lang="ruby">
+
إذا لم يُعطَ الوسيط <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
 
# Create a structure with a name under Struct
 
Struct.new("Customer", :name, :address)
 
Struct.new("Customer", :name, :address)
سطر 21: سطر 27:
 
Customer.new(name: "Dave", address: "123 Main")
 
Customer.new(name: "Dave", address: "123 Main")
 
#=> #<struct Customer name="Dave", address="123 Main">
 
#=> #<struct Customer name="Dave", address="123 Main">
</syntaxhighlight>إذا تم إعطاء كتلة، فسيتم تقييمها في سياق البنية، وسيُمرّر إليها الصنف الذي تم إنشاؤه كوسيط: <syntaxhighlight lang="ruby">
+
</syntaxhighlight>إذا تم إعطاء كتلة، فسيتم تقييمها في سياق البنية، وسيُمرّر إليها الصنف الذي تم إنشاؤه كمعامل: <syntaxhighlight lang="ruby">
 
Customer = Struct.new(:name, :address) do
 
Customer = Struct.new(:name, :address) do
 
   def greeting
 
   def greeting
سطر 28: سطر 34:
 
end
 
end
 
Customer.new("Dave", "123 Main").greeting  #=> "Hello Dave!"
 
Customer.new("Dave", "123 Main").greeting  #=> "Hello Dave!"
</syntaxhighlight>هذه هي الطريقة الموصى بها لتخصيص ال[[Ruby/Struct|بنيات]]. حيث تؤدي الأصناف الفرعية أو المجهولة لل[[Ruby/Struct|بنية]] إلى إنشاء أصناف مجهولة إضافية، والتي لن يتم استخدامها.
+
</syntaxhighlight>هذه هي الطريقة الموصى بها لتخصيص ال[[Ruby/Struct|بنيات]]، إذ تؤدي الأصناف الفرعية أو المجهولة لل[[Ruby/Struct|بنية]] إلى إنشاء أصناف مجهولة إضافية، والتي لن يتم استخدامها.
  
الشكلان الأخيران (انظر فقرة البنية العامة) يُنشئان نسخة جديدة من صنف فرعي لـ<code>[[Ruby/Struct|Struct]]</code>.  يجب أن يكون عدد وسائط <code>value</code> المعطاة أصغر من أو يساوي عدد الخاصيات المعرّفة في ال[[Ruby/Struct|بنية]].   
+
الشكلان الأخيران يُنشئان نسخةً جديدةً من صنف فرعي للصنف <code>[[Ruby/Struct|Struct]]</code>.  يجب أن يكون عدد المعاملات <code>value</code> المعطاة أصغر من أو يساوي عدد الخاصيات المعرّفة في ال[[Ruby/Struct|بنية]].   
  
القيمة الافتراضية للوسائط غير المعينة هي <code>nil</code>. وإن كان عدد الوسائط المُمررة أكثر من عدد الخاصيات فسيُطلق الاستثناء <code>[[Ruby/ArgumentError|ArgumentError]]</code>.
+
القيمة الافتراضية للمعاملات غير المعينة هي <code>nil</code>. وإن كان عدد المعاملات المُمررة أكثر من عدد الخاصيات، فسيُطلَق الاستثناء <code>[[Ruby/ArgumentError|ArgumentError]]</code>.
==البنية العامة==
 
<syntaxhighlight lang="ruby">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‎</syntaxhighlight>
 
 
==المعاملات==
 
==المعاملات==
 
===<code>class_name‎</code>===
 
===<code>class_name‎</code>===
سطر 47: سطر 47:
  
 
===<code>keyword_init</code>===
 
===<code>keyword_init</code>===
إذا أعطي هذا الوسيط  القيمة <code>true</code>، فسيأخذ التابع <code>new</code> وسائط مسماة (keyword arguments) بدلاً من الوسائط العادية.
+
إذا أعطي هذا المعامل القيمة <code>true</code>، فسيأخذ التابع <code>new</code> وسائط مسماة (keyword arguments) بدلاً من الوسائط العادية.
  
 
===<code>value‎</code>===
 
===<code>value‎</code>===
سطر 53: سطر 53:
  
 
==القيمة المُعادة==
 
==القيمة المُعادة==
يعيد التابع <code>new</code> [[Ruby/Struct|بنية]] جديدة.
+
تعاد [[Ruby/Struct|بنية]] جديدة.
  
 
==أمثلة==
 
==أمثلة==
سطر 62: سطر 62:
 
Customer["Dave"]
 
Customer["Dave"]
 
#=> #<struct Customer name="Dave", address=nil></syntaxhighlight>
 
#=> #<struct Customer name="Dave", address=nil></syntaxhighlight>
==انظر أيضا==
+
==انظر أيضًا==
* صفحة [[Ruby/Struct|البنيات]].
+
* المعامل <code>[[Ruby/Struct/equality operator|==]]</code>: يتحقق إن كان [[Ruby/Struct|لبنية]] ما نفس الصنف الفرعي ونفس قيم الأعضاء مقارنةً [[Ruby/Struct|ببنية]] أخرى.
 +
* المعامل <code>[[Ruby/Struct/index operator|[]]]</code>: يجلب قيمة عضو ال[[Ruby/Struct|بنية]] المعطى، أو قيمة العضو ذي الفهرس المحدَّد.
 +
* التابع <code>[[Ruby/Struct/each|each]]</code>: يعيد قيمة كل عضو من أعضاء <nowiki/>[[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‎ في توثيق روبي الرسمي.]

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

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

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

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

يُستخدم الشكلان الأولان من التابع new لإنشاء صنف فرعي جديد من 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.

المعاملات

class_name‎

اسم البنية.

member_name

اسم العضو.

keyword_init

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

value‎

قيمة.

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

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

أمثلة

مثال على استخدام التابع 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>

انظر أيضًا

  • المعامل ==: يتحقق إن كان لبنية ما نفس الصنف الفرعي ونفس قيم الأعضاء مقارنةً ببنية أخرى.
  • المعامل []: يجلب قيمة عضو البنية المعطى، أو قيمة العضو ذي الفهرس المحدَّد.
  • التابع each: يعيد قيمة كل عضو من أعضاء البنية بالترتيب.

مصادر