الفرق بين المراجعتين لصفحة: «Ruby/Range»
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 2: | سطر 2: | ||
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: 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> فلن تشمل قيمة النهاية. | |||
عند استخدامها كمكرر (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"] | ||
('a'...'e').to_a #=> ["a", "b", "c", "d"] | ('a'...'e').to_a #=> ["a", "b", "c", "d"] | ||
</syntaxhighlight> تخصيص المجالات | </syntaxhighlight> | ||
== تخصيص المجالات == | |||
يمكن إنشاء المجالات باستخدام أيٍّ من الكائنات التي يمكن المقارنة بينها باستخدام المعامل <code><=></code>. تتوقع التوابع التي تتعامل مع المجالات كتسلسلات (مثل <code>each</code> والتوابع الموروثة من <code>[[Ruby/Enumerable|Enumerable]]</code>) أن يقوم كائن بداية المجال بتقديم (implement) تابع يُسمى <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 | |||
include Comparable | include Comparable | ||
attr :length | attr :length | ||
سطر 25: | سطر 34: | ||
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> | ||
==توابع الصنف العامة (Public Class Methods)== | |||
===[[Ruby/Range/new| التابع new]]=== | |||
ينشئ مجالًا. | |||
==توابع | == توابع النسخة العامة (Public Instance Methods) == | ||
===[[Ruby/Range/equality operator| المعامل ==]]=== | |||
===[[Ruby/Range/ | معامل التساوي. | ||
===[[Ruby/Range/case equality| المعامل ===]]=== | |||
===[[Ruby/Range/ | يعيد القيمة <code>true</code> إن كان <code>obj</code> أحد عناصر المجال، | ||
يعيد القيمة <code>true</code> إن كان <code>obj</code> أحد عناصر المجال، | ===[[Ruby/Range/begin| التابع begin]]=== | ||
===[[Ruby/Range/begin | التابع begin]]=== | |||
يعيد الكائن الذي يحدد بداية المجال. | يعيد الكائن الذي يحدد بداية المجال. | ||
===[[Ruby/Range/bsearch | التابع bsearch]]=== | ===[[Ruby/Range/bsearch| التابع bsearch]]=== | ||
يبحث عن قيمة من المجال تفي بالشرط المعطى. | |||
===[[Ruby/Range/cover-3F | التابع cover?]]=== | ===[[Ruby/Range/cover-3F| التابع cover?]]=== | ||
يعيد القيمة <code>true</code> إن كان <code>obj</code> محصورًا بين بداية ونهاية المجال. | يعيد القيمة <code>true</code> إن كان <code>obj</code> محصورًا بين بداية ونهاية المجال. | ||
===[[Ruby/Range/each | التابع each]]=== | ===[[Ruby/Range/each| التابع each]]=== | ||
يُكرر تنفيذ الكتلة المعطاة مع تمرير عناصر المجال إليها بالتتابع. | يُكرر تنفيذ الكتلة المعطاة مع تمرير عناصر المجال إليها بالتتابع. | ||
===[[Ruby/Range/end | التابع end]]=== | ===[[Ruby/Range/end| التابع end]]=== | ||
يعيد الكائن الذي يحدد نهاية المجال. | يعيد الكائن الذي يحدد نهاية المجال. | ||
===[[Ruby/Range/eql-3F | التابع eql?]]=== | ===[[Ruby/Range/eql-3F| التابع eql?]]=== | ||
يتحقق من تساوي مجالين. | |||
===[[Ruby/Range/ | ===[[Ruby/Range/exclude end-3F| التابع exclude_end?]]=== | ||
يعيد القيمة <code>true</code> إن كان المجال يستثني قيمته النهائية. | يعيد القيمة <code>true</code> إن كان المجال يستثني قيمته النهائية. | ||
===[[Ruby/Range/first | التابع first]]=== | ===[[Ruby/Range/first| التابع first]]=== | ||
يعيد الكائن الأول في المجال، أو يعيد مصفوفة مكونة من أول <code>n</code> عنصر. | يعيد الكائن الأول في المجال، أو يعيد مصفوفة مكونة من أول <code>n</code> عنصر. | ||
===[[Ruby/Range/hash | التابع hash]]=== | ===[[Ruby/Range/hash| التابع hash]]=== | ||
يحسب رمز التكويد (hash-code) | يحسب رمز التكويد (hash-code) للمجال. | ||
===[[Ruby/Range/include-3F | التابع include?]]=== | ===[[Ruby/Range/include-3F| التابع include?]]=== | ||
يعيد القيمة <code>true</code> إن كان <code>obj</code> عنصرًا من المجال، | يعيد القيمة <code>true</code> إن كان <code>obj</code> عنصرًا من المجال، | ||
===[[Ruby/Range/inspect | التابع inspect]]=== | ===[[Ruby/Range/inspect| التابع inspect]]=== | ||
بُحوّل المجال إلى شكل قابل للطباعة (باستخدام <code>inspect</code> لتحويل عنصري البداية والنهاية). | بُحوّل المجال إلى شكل قابل للطباعة (باستخدام <code>inspect</code> لتحويل عنصري البداية والنهاية). | ||
===[[Ruby/Range/last | التابع last]]=== | ===[[Ruby/Range/last| التابع last]]=== | ||
يعيد العنص الأخير في المجال، أو مصفوفة مؤلفة من آخر <code>n</code> عنصر. | يعيد العنص الأخير في المجال، أو مصفوفة مؤلفة من آخر <code>n</code> عنصر. | ||
===[[Ruby/Range/max | التابع max]]=== | ===[[Ruby/Range/max| التابع max]]=== | ||
يعيد القيمة القصوى من المجال. | يعيد القيمة القصوى من المجال. ي | ||
===[[Ruby/Range/member-3F | التابع member?]]=== | ===[[Ruby/Range/member-3F| التابع member?]]=== | ||
يعيد القيمة <code>true</code> إن كان <code>obj</code> عنصرًا من المجال | يعيد القيمة <code>true</code> إن كان <code>obj</code> عنصرًا من المجال. | ||
===[[Ruby/Range/min | التابع min]]=== | ===[[Ruby/Range/min| التابع min]]=== | ||
يعيد القيمة الدنيا من المجال | يعيد القيمة الدنيا من المجال. | ||
===[[Ruby/Range/size | التابع size]]=== | ===[[Ruby/Range/size| التابع size]]=== | ||
يعيد عدد العناصر في المجال | يعيد عدد العناصر في المجال. | ||
===[[Ruby/Range/step | التابع step]]=== | ===[[Ruby/Range/step| التابع step]]=== | ||
يكرر الكتلة المعطاة ويمرر إليها <code>n</code> عنصرًا من عناصر المجال بالتتابع | يكرر الكتلة المعطاة ويمرر إليها <code>n</code> عنصرًا من عناصر المجال بالتتابع. | ||
===[[Ruby/Range/ | ===[[Ruby/Range/to s| التابع to_s]]=== | ||
بُحوّل المجال إلى شكل قابل للطباعة | بُحوّل المجال إلى شكل قابل للطباعة. | ||
*[http://ruby-doc.org/core-2.5.1/Range.html قسم الصنف Range في توثيق روبي الرسمي.] | *[http://ruby-doc.org/core-2.5.1/Range.html قسم الصنف Range في توثيق روبي الرسمي.] |
مراجعة 19:51، 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
ينشئ مجالًا.
توابع النسخة العامة (Public Instance Methods)
المعامل ==
معامل التساوي.
المعامل ===
يعيد القيمة true
إن كان obj
أحد عناصر المجال،
التابع begin
يعيد الكائن الذي يحدد بداية المجال.
التابع bsearch
يبحث عن قيمة من المجال تفي بالشرط المعطى.
التابع cover?
يعيد القيمة true
إن كان obj
محصورًا بين بداية ونهاية المجال.
التابع each
يُكرر تنفيذ الكتلة المعطاة مع تمرير عناصر المجال إليها بالتتابع.
التابع end
يعيد الكائن الذي يحدد نهاية المجال.
التابع eql?
يتحقق من تساوي مجالين.
التابع exclude_end?
يعيد القيمة true
إن كان المجال يستثني قيمته النهائية.
التابع first
يعيد الكائن الأول في المجال، أو يعيد مصفوفة مكونة من أول n
عنصر.
التابع hash
يحسب رمز التكويد (hash-code) للمجال.
التابع include?
يعيد القيمة true
إن كان obj
عنصرًا من المجال،
التابع inspect
بُحوّل المجال إلى شكل قابل للطباعة (باستخدام inspect
لتحويل عنصري البداية والنهاية).
التابع last
يعيد العنص الأخير في المجال، أو مصفوفة مؤلفة من آخر n
عنصر.
التابع max
يعيد القيمة القصوى من المجال. ي
التابع member?
يعيد القيمة true
إن كان obj
عنصرًا من المجال.
التابع min
يعيد القيمة الدنيا من المجال.
التابع size
يعيد عدد العناصر في المجال.
التابع step
يكرر الكتلة المعطاة ويمرر إليها n
عنصرًا من عناصر المجال بالتتابع.
التابع to_s
بُحوّل المجال إلى شكل قابل للطباعة.