الفرق بين المراجعتين لصفحة: «Ruby/Range»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE: | <noinclude>{{DISPLAYTITLE:الصنف <code>Range</code> في روبي}}</noinclude> | ||
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: Ruby Class]] | |||
[[تصنيف: Ruby Range]] | [[تصنيف: Ruby Range]] | ||
يمثل الصنف <code>Range</code> مجالًا | يمثل الصنف <code>Range</code> مجالًا (مجموعة) من القيم لها بداية ونهاية. | ||
يمكن إنشاء المجالات باستخدام الصياغة الحرفية <code>s..e</code> و <code>s...e</code> ، أو باستخدام التابع الباني <code>[[Ruby/Range/new|new]]</code>. المجالات المُنشأة باستخدام الصياغة <code>..</code> تشمل عنصري البداية والنهاية. أما تلك المُنشأة باستخدام الصياغة <code>...</code> فلن تشمل قيمة النهاية. | يمكن إنشاء المجالات باستخدام الصياغة الحرفية بالشكل <code>s..e</code> و <code>s...e</code> ، أو باستخدام التابع الباني <code>[[Ruby/Range/new|new]]</code>. المجالات المُنشأة باستخدام الصياغة <code>..</code> تشمل عنصري البداية والنهاية. أما تلك المُنشأة باستخدام الصياغة <code>...</code> فلن تشمل قيمة النهاية. عند استخدامها كمكرر (iterator)، ستعيد المجالات كل قيمها بالتتابع.<syntaxhighlight lang="ruby">(-1..-5).to_a #=> [] | ||
عند استخدامها كمكرر (iterator)، ستعيد المجالات كل قيمها بالتتابع.<syntaxhighlight lang="ruby">(-1..-5).to_a #=> [] | |||
(-5..-1).to_a #=> [-5, -4, -3, -2, -1] | (-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", "e"] | ||
سطر 13: | سطر 12: | ||
== تخصيص المجالات == | == تخصيص المجالات == | ||
يمكن إنشاء المجالات باستخدام أيٍّ من الكائنات التي يمكن المقارنة بينها باستخدام المعامل <code><=></code>. تتوقع التوابع التي تتعامل مع المجالات كتسلسلات (مثل <code>each</code> والتوابع الموروثة من <code>[[Ruby/Enumerable|Enumerable]]</code>) أن | يمكن إنشاء المجالات باستخدام أيٍّ من الكائنات التي يمكن المقارنة بينها باستخدام المعامل <code><=></code>. تتوقع التوابع التي تتعامل مع المجالات كتسلسلات (مثل التابع <code>each</code> والتوابع الموروثة من <code>[[Ruby/Enumerable|Enumerable]]</code>) أن يقدم كائن بداية المجال تابعًا يُسمى <code>succ</code> يعيد الكائن التالي. يتطلب التابعان <code>[[Ruby/Range/step|step]]</code> و <code>[[Ruby/Range/include-3F|include?]]</code> من عنصر بداية المجال تقديم التابع <code>succ</code>، أو أن يكون قيمة عددية. | ||
في الصنف <code>Xs</code>، أدناه قُدِّم كلّ من المعاملين <code><=></code> و <code>succ</code> حتى يُستخدم <code>Xs</code> لبناء المجالات. لاحظ أنه تم تضمين الوحدة <code>[[Ruby/Comparable|Comparable]]</code> حتى يتم تعريف المعامل<code>[[Ruby/Range/equality operator|==]]</code> بالتوافق مع المعامل <code><=></code>.<syntaxhighlight lang="ruby">class Xs # represent a string of 'x's | في الصنف <code>Xs</code>، أدناه قُدِّم كلّ من المعاملين <code><=></code> و <code>succ</code> حتى يُستخدم <code>Xs</code> لبناء المجالات. لاحظ أنه تم تضمين الوحدة <code>[[Ruby/Comparable|Comparable]]</code> حتى يتم تعريف المعامل <code>[[Ruby/Range/equality operator|==]]</code> بالتوافق مع المعامل <code><=></code>.<syntaxhighlight lang="ruby">class Xs # represent a string of 'x's | ||
include Comparable | include Comparable | ||
attr :length | attr :length | ||
سطر 34: | سطر 33: | ||
end | end | ||
end | end | ||
</syntaxhighlight>مثال على استخدام <code>Xs</code> لإنشاء مجال:<syntaxhighlight lang="ruby">r = Xs.new(3)..Xs.new(6) #=> xxx..xxxxxx | </syntaxhighlight>الشيفرة التالية هي مثال على استخدام الصنف <code>Xs</code> لإنشاء مجال:<syntaxhighlight lang="ruby">r = Xs.new(3)..Xs.new(6) #=> xxx..xxxxxx | ||
r.to_a #=> [xxx, xxxx, xxxxx, xxxxxx] | r.to_a #=> [xxx, xxxx, xxxxx, xxxxxx] | ||
r.member?(Xs.new(5)) #=> true | r.member?(Xs.new(5)) #=> true | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==توابع الصنف العامة | ==توابع الصنف العامة== | ||
===[[Ruby/Range/new| | ===[[Ruby/Range/new|<code>new</code>]]=== | ||
ينشئ | ينشئ مجالًا من قيمتين تمثِّل إحداها بداية المجال والأخرى نهايته. | ||
== توابع النسخة العامة | == توابع النسخة العامة == | ||
===[[Ruby/Range/equality operator| | ===[[Ruby/Range/equality operator|<code>==</code>]]=== | ||
يتحقق من تساوي مجالين مع بعضهما بعضًا. | |||
===[[Ruby/Range/case equality| | ===[[Ruby/Range/case equality|<code>===</code>]]=== | ||
يعيد | يعيد القيمة <code>true</code> إن كانت قيمةٌ أو كائنٌ ما أحد عناصر المجال (أي تقع ضمنه). | ||
===[[Ruby/Range/begin| | ===[[Ruby/Range/begin|<code>begin</code>]]=== | ||
يعيد الكائن الذي يحدد بداية المجال. | يعيد الكائن الذي يحدد بداية المجال. | ||
===[[Ruby/Range/bsearch| | ===[[Ruby/Range/bsearch|<code>bsearch</code>]]=== | ||
يبحث | يبحث عن قيمة من المجال تفي بالشرط المعطى. | ||
===[[Ruby/Range/cover-3F| | ===[[Ruby/Range/cover-3F|<code>cover?</code>]]=== | ||
يتحقق إن كان الكائن المُمرَّر إليه محصورًا بين بداية ونهاية المجال. | |||
===[[Ruby/Range/each| | ===[[Ruby/Range/each|<code>each</code>]]=== | ||
يُكرر | يُكرر تنفيذ الكتلة المعطاة مع تمرير عناصر المجال إليها بالتتابع. | ||
===[[Ruby/Range/end| | ===[[Ruby/Range/end|<code>end</code>]]=== | ||
يعيد | يعيد الكائن الذي يحدد نهاية المجال. | ||
===[[Ruby/Range/eql-3F| | ===[[Ruby/Range/eql-3F|<code>eql?</code>]]=== | ||
يتحقق من تساوي مجالين. | يتحقق من تساوي مجالين. | ||
===[[Ruby/Range/exclude end-3F| | ===[[Ruby/Range/exclude end-3F|<code>exclude_end?</code>]]=== | ||
يتحقق إن كان المجال يستثني قيمته النهائية. | |||
===[[Ruby/Range/first| | ===[[Ruby/Range/first|<code>first</code>]]=== | ||
يعيد | يعيد الكائن الأول في المجال، أو يعيد مصفوفة مكونة من أول <code>n</code> عنصر. | ||
===[[Ruby/Range/hash| | ===[[Ruby/Range/hash|<code>hash</code>]]=== | ||
يحسب | يحسب الشيفرة hash للمجال الذي استدعي معه. | ||
===[[Ruby/Range/include-3F| | ===[[Ruby/Range/include-3F|<code>include?</code>]]=== | ||
يتحقق إن كان كائنٌ ما عنصرًا من المجال المعطى. | |||
===[[Ruby/Range/inspect| | ===[[Ruby/Range/inspect|<code>inspect</code>]]=== | ||
يحوّل المجال الذي استُدعي معه إلى شكل قابل للطباعة. | |||
===[[Ruby/Range/last| | ===[[Ruby/Range/last|<code>last</code>]]=== | ||
يعيد | يعيد العنصر الأخير في المجال، أو مصفوفة مؤلفة من آخر <code>n</code> عنصر. | ||
===[[Ruby/Range/max| | ===[[Ruby/Range/max|<code>max</code>]]=== | ||
يعيد | يعيد أكبر قيمة من المجال المعطى. | ||
===[[Ruby/Range/member-3F| | ===[[Ruby/Range/member-3F|<code>member?</code>]]=== | ||
يتحقق إن كان كائنٌ ما عنصرًا من المجال الذي استُدعي معه. | |||
===[[Ruby/Range/min| | ===[[Ruby/Range/min|<code>min</code>]]=== | ||
يعيد | يعيد أصغر قيمة من المجال. | ||
===[[Ruby/Range/size| | ===[[Ruby/Range/size|<code>size</code>]]=== | ||
يعيد | يعيد عدد العناصر في المجال. | ||
===[[Ruby/Range/step| | ===[[Ruby/Range/step|<code>step</code>]]=== | ||
يكرر الكتلة المعطاة ويمرر إليها <code>n</code> عنصرًا من عناصر المجال بالتتابع. | يكرر الكتلة المعطاة ويمرر إليها <code>n</code> عنصرًا من عناصر المجال بالتتابع. | ||
===[[Ruby/Range/to s| | ===[[Ruby/Range/to s|<code>to_s</code>]]=== | ||
يحوّل المجال إلى شكل قابل للطباعة. | |||
*[http://ruby-doc.org/core-2.5.1/Range.html | |||
== مصادر == | |||
*[http://ruby-doc.org/core-2.5.1/Range.html صفحة الصنف Range في توثيق روبي الرسمي.] |
المراجعة الحالية بتاريخ 07:10، 3 ديسمبر 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
) أن يقدم كائن بداية المجال تابعًا يُسمى 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
توابع الصنف العامة
new
ينشئ مجالًا من قيمتين تمثِّل إحداها بداية المجال والأخرى نهايته.
توابع النسخة العامة
==
يتحقق من تساوي مجالين مع بعضهما بعضًا.
===
يعيد القيمة true
إن كانت قيمةٌ أو كائنٌ ما أحد عناصر المجال (أي تقع ضمنه).
begin
يعيد الكائن الذي يحدد بداية المجال.
bsearch
يبحث عن قيمة من المجال تفي بالشرط المعطى.
cover?
يتحقق إن كان الكائن المُمرَّر إليه محصورًا بين بداية ونهاية المجال.
each
يُكرر تنفيذ الكتلة المعطاة مع تمرير عناصر المجال إليها بالتتابع.
end
يعيد الكائن الذي يحدد نهاية المجال.
eql?
يتحقق من تساوي مجالين.
exclude_end?
يتحقق إن كان المجال يستثني قيمته النهائية.
first
يعيد الكائن الأول في المجال، أو يعيد مصفوفة مكونة من أول n
عنصر.
hash
يحسب الشيفرة hash للمجال الذي استدعي معه.
include?
يتحقق إن كان كائنٌ ما عنصرًا من المجال المعطى.
inspect
يحوّل المجال الذي استُدعي معه إلى شكل قابل للطباعة.
last
يعيد العنصر الأخير في المجال، أو مصفوفة مؤلفة من آخر n
عنصر.
max
يعيد أكبر قيمة من المجال المعطى.
member?
يتحقق إن كان كائنٌ ما عنصرًا من المجال الذي استُدعي معه.
min
يعيد أصغر قيمة من المجال.
size
يعيد عدد العناصر في المجال.
step
يكرر الكتلة المعطاة ويمرر إليها n
عنصرًا من عناصر المجال بالتتابع.
to_s
يحوّل المجال إلى شكل قابل للطباعة.