الفرق بين المراجعتين لصفحة: «Ruby/Range»
أنشأ الصفحة ب'</syntaxhighlight><noinclude>{{DISPLAYTITLE: صفحة الصنف <code>Range</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Ruby Range يمثل...' |
لا ملخص تعديل |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>Range</code> في روبي}}</noinclude> | |||
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: Ruby Range]] | [[تصنيف: Ruby Range]] |
مراجعة 19:41، 30 أكتوبر 2018
يمثل الصنف Range
مجالًا - مجموعة من القيم لها بداية ونهاية. يمكن إنشاء المجالات باستخدام المحارف s..
e و s...
e ، أو باستخدام ::new
. المجالات المُنشأة باستخدام الصياغة النقطية ..
تشمل عنصري البداية والنهاية. أما تلك المُنشأة باستخدام ...
فلن تشمل قيمة النهاية. عند استخدامها كمكرر (iterator)، ستعيد المجالات بالتتابع كل قيمها.
(-1..-5).to_a #=> []
(-5..-1).to_a #=> [-5, -4, -3, -2, -1]
('a'..'e').to_a #=> ["a", "b", "c", "d", "e"]
('a'...'e').to_a #=> ["a", "b", "c", "d"]
تخصيص المجالات ¶
↑
يمكن إنشاء المجالات باستخدام أيٍّ من الكائنات التي يمكن المقارنة بينها باستخدام المعامل <=>
. تتوقع التوابع التي تتعامل مع المجالات كتسلسلات (#each والتوابع الموروثة من Enumerable
) أن يقوم كائن بداية المجال بتقديم (implement) تابع succ
يعيد الكائن الموالي. يتطلب التابعان step
و include?
من كائن بداية المجال تقديم التابع succ
، أو أن يكون قيمة عددية. في الصنف Xs
أدناه قُدِّم كلّ من <=>
و succ
حتى يُستخدم Xs
لبناء المجالات. لاحظ أنه تم تضمين الوحدة Comparable
بحيث يتم تعريف التابع ==
بالتوافق مع <=>
.
class Xs # represent a string of 'x's
include Comparable
attr :length
def initialize(n)
@length = n
end
def succ
Xs.new(@length + 1)
end
def <=>(other)
@length <=> other.length
end
def to_s
sprintf "%2d #{inspect}", @length
end
def inspect
'x' * @length
end
end
مثال على استخدام Xs
لإنشاء مجال:
r = Xs.new(3)..Xs.new(6) #=> xxx..xxxxxx
r.to_a #=> [xxx, xxxx, xxxxx, xxxxxx]
r.member?(Xs.new(5)) #=> true
توابع الصنف العامة (Public Class Methods)
التابع new
ينشئ مجالًا باستخدام الوسيطين begin
و end
. في حال حذف الوسيط exclude_end
أو false
، فسيشل rng
كائن النهاية. خلاف ذلك، سيُستبعد.
التابع ==
يعيد القيمة true
فقط إن كان obj
من النوع Range
، وكان له نفس عنصري البداية والنهاية (بمقارنتهما بالمعامل ==
)، وكان له نفس إعدادات exclude_end?
مقارنة ب.
التابع ===
يعيد القيمة true
إن كان obj
أحد عناصر المجال، أو false
خلاف ذلك. المعامل ===
هو معلم المقارنة الذي تستخدمه عبارات case
.
التابع begin
يعيد الكائن الذي يحدد بداية المجال.
التابع bsearch
باستخدام البحث الثنائي (binary search)، يبحث عن قيمة من المجال تفي بالشرط المعطى في مدة O (log n) حيث n هو حجم المجال.
التابع cover?
يعيد القيمة true
إن كان obj
محصورًا بين بداية ونهاية المجال.
التابع each
يُكرر تنفيذ الكتلة المعطاة مع تمرير عناصر المجال إليها بالتتابع.
التابع end
يعيد الكائن الذي يحدد نهاية المجال.
التابع eql?
يعيد القيمة true
فقط إن كان obj
من النوع Range
، وكان له نفس عنصري البداية والنهاية (بمقارنتها بالمعامل eql?
) ، وكان له نفس إعدادات exclude_end?
مقارنة ب.
التابع exclude_end?
يعيد القيمة true
إن كان المجال يستثني قيمته النهائية.
التابع first
يعيد الكائن الأول في المجال، أو يعيد مصفوفة مكونة من أول n
عنصر.
التابع hash
يحسب رمز التكويد (hash-code) لهذا المجال. مجالان عنصرا بدايتهما ونهايتهما متساويان (باستخدام المعامل eql?
)، وقيمة exclude_end?
الخاصة بهما متساوية سيُولّدان نفس رمز التكويد.
التابع include?
يعيد القيمة true
إن كان obj
عنصرًا من المجال، أو يعيد false
خلاف ذلك. إن كانت عنصرا البداية والنهاية عددان، قستتم المقارنة وفقًا لمقدار (magnitude) القيم.
التابع inspect
بُحوّل المجال إلى شكل قابل للطباعة (باستخدام inspect
لتحويل عنصري البداية والنهاية).
التابع last
يعيد العنص الأخير في المجال، أو مصفوفة مؤلفة من آخر n
عنصر.
التابع max
يعيد القيمة القصوى من المجال. يعيد nil
إن كان عنصر بداية المجال أكبر من عنصر نهايته. ويعيد nil
إن كانت قيمة البداية لمجال إقصائي (exclusive) مساوية لقيمة نهايته.
التابع member?
يعيد القيمة true
إن كان obj
عنصرًا من المجال ، أو يعيد false
خلاف ذلك. إن كان عنصرا البداية والنهاية عددين، فستتم المقارنة وفقًا لمقدار (magnitude) القيم.
التابع min
يعيد القيمة الدنيا من المجال. يعيد nil
إن كانت قيمة بداية المجال أكبر من قيمة نهايته. أو يعيد nil
إن كانت قيمة البداية للمجال الإقصائي (exclusive، أي أنه يستثني عنصر النهاية) مساوية لقيمة عنصر النهاية.
التابع size
يعيد عدد العناصر في المجال. يجب أن يكون كل من بداية ونهاية Range
قيمتان عدديتان (Numeric
)، وإلا فستُعاد nil.
التابع step
يكرر الكتلة المعطاة ويمرر إليها n
عنصرًا من عناصر المجال بالتتابع. إن كان عنصرا البداية والنهاية عددان، فسيضاف n
عند كل تكرار. وإلا، فإن step
ستستدعي succ
للتكرار عبر عناصر المجال.
التابع to_s
بُحوّل المجال إلى شكل قابل للطباعة (باستخدام to_s
لتحويل عنصري البداية والنهاية).