صفحة الصنف Range في روبي

من موسوعة حسوب

يمثل الصنف 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

بُحوّل المجال إلى شكل قابل للطباعة.