الفرق بين المراجعتين لصفحة: «Ruby/Numeric»

من موسوعة حسوب
لا ملخص تعديل
لا ملخص تعديل
سطر 58: سطر 58:
</syntaxhighlight>
</syntaxhighlight>


==توابع الصنف العامة (Public Class Methods)==
==توابع النسخ العامة (Public Instance Methods)==
===[[Ruby/Numeric/25 | التابع %]]===
=== [[Ruby/Numeric/mod|التابع %]]===
يكافئ <code>x.modulo(y)</code> التعبير <code>x-y*(x/y).floor</code>.
يعيد <code>x.modulo(y)</code> ناتج التعبير <code>x-y*(x/y).floor</code>.
===[[Ruby/Numeric/2B-40 | التابع +@]]===
=== [[Ruby/Numeric/plus|التابع +@]]===
علامة الإضافة الأحادية (Unary Plus) - تعيد المُستقبِل.
علامة الإضافة الأحادية (Unary Plus)  
===[[Ruby/Numeric/2D-40 | التابع -@]]===
=== [[Ruby/Numeric/minus|التابع -@]]===
علامة ناقص الأحادية (Unary Minus) - تعيد المستقبِل (receiver) منفيًا.
علامة ناقص الأحادية (Unary Minus)  
===[[Ruby/Numeric/3C-3D-3E | التابع <=>]]===
=== [[Ruby/Numeric/compar|التابع <=>]]===
يعيد  القيمة صفر إن كان <code>number</code> يساوي <code>other</code>، وإلا فسيُعيد <code>nil</code>.
يعيد  القيمة صفر إن كان <code>number</code> يساوي <code>other</code>، وإلا فسيُعيد <code>nil</code>.
===[[Ruby/Numeric/abs | التابع abs]]===
===[[Ruby/Numeric/abs | التابع abs]]===
سطر 72: سطر 72:
يعيد مربع العدد الذي استُدعي معه.
يعيد مربع العدد الذي استُدعي معه.
===[[Ruby/Numeric/angle | التابع angle]]===
===[[Ruby/Numeric/angle | التابع angle]]===
يعيد  القيمة 0 إن كانت القيمة موجبة، أو pi خلاف ذلك.
يعيد  القيمة 0 إن كانت القيمة موجبة، أو <code>pi</code> خلاف ذلك.
===[[Ruby/Numeric/arg | التابع arg]]===
===[[Ruby/Numeric/arg | التابع arg]]===
يعيد  القيمة 0 إن كانت القيمة موجبة، أو pi خلاف ذلك.
يعيد  القيمة 0 إن كانت القيمة موجبة، أو <code>pi</code> خلاف ذلك.
===[[Ruby/Numeric/ceil | التابع ceil]]===
===[[Ruby/Numeric/ceil | التابع ceil]]===
يعيد أصغر عدد أكبر من أو يساوي <code>num</code> بدقة <code>ndigits</code> موضعا عشريًا (القيمة الافتراضية هي 0).
يعيد التابع <code>ceil</code> أصغر عدد من الأعداد الأكبر من أو تساوي العدد الذي استُدعي معه بدقة <code>ndigits</code> موضعا عشريًا (القيمة الافتراضية هي 0).
===[[Ruby/Numeric/clone | التابع clone]]===
===[[Ruby/Numeric/clone | التابع clone]]===
يعيد الكائن الذي استُدعي معه.  <code>freeze</code> لا يمكن أن تساوي <code>false</code> .
يعيد الكائن الذي استُدعي معه.   
===[[Ruby/Numeric/coerce | التابع coerce]]===
===[[Ruby/Numeric/coerce | التابع coerce]]===
إن كان <code>numeric</code> من نفس نوع <code>num</code>، فستُعاد مصفوفة <code>[numeric, num]</code>. خلاف ذلك، ستٌعاد مصفوفة مع <code>numeric</code> و <code>num</code> ممثلين كعددين عشريين (<code>Float</code>).
إن كان <code>numeric</code> من نفس نوع <code>num</code>، فستُعاد مصفوفة <code>[numeric, num]</code>. خلاف ذلك، ستٌعاد مصفوفة مع <code>numeric</code> و <code>num</code> ممثلين كعددين عشريين (<code>Float</code>).
===[[Ruby/Numeric/conj | التابع conj]]===
===[[Ruby/Numeric/conj | التابع conj]]===
يعيد  الكائن self.
يعيد  الكائن <code>self</code>.
===[[Ruby/Numeric/conjugate | التابع conjugate]]===
===[[Ruby/Numeric/conjugate | التابع conjugate]]===
يعيد  الكائن self.
يعيد  الكائن <code>self</code>.
===[[Ruby/Numeric/denominator | التابع denominator]]===
===[[Ruby/Numeric/denominator | التابع denominator]]===
يعيد  المقام (denominator)، ويكون دائمًا موجبًا.
يعيد  المقام (denominator)، ويكون دائمًا موجبًا.
===[[Ruby/Numeric/div | التابع div]]===
===[[Ruby/Numeric/div | التابع div]]===
يستخدم  العملية <code>/</code> لإجراء القسمة، ثم يحوّل النتيجة إلى عدد صحيح. لا يعرفق <code>Numeric</code> العملية <code>/</code>؛ فهذا يُترك للأصناف الفرعية.
يستخدم  العملية <code>/</code> لإجراء القسمة، ثم يحوّل النتيجة إلى عدد صحيح.  
===[[Ruby/Numeric/divmod | التابع divmod]]===
===[[Ruby/Numeric/divmod | التابع divmod]]===
يعيد مصفوفة تحتوي على الحاصل (quotient) والباقي المتحصل عليه بقسمة <code>num</code> على <code>numeric</code>.
يعيد التابع <code>divmod</code> مصفوفة تحتوي على الحاصل (quotient) والباقي الناتج عن قسمة العدد الذي استُدعي معه على الوسيط المعطى <code>numeric</code>.
===[[Ruby/Numeric/dup | التابع dup]]===
===[[Ruby/Numeric/dup | التابع dup]]===
يعيد  الكائن الذي استُدعي معه.
يعيد  الكائن الذي استُدعي معه.
===[[Ruby/Numeric/eql-3F | التابع eql?]]===
===[[Ruby/Numeric/eql-3F | التابع eql?]]===
يعيد  القيمة <code>true</code> إن كان <code>num</code> و <code>numeric</code> من نفس النوع وكانت قيممهما متساوية.  على خلاف Numeric#==، الذي ينفذ تحويلات النوع.
يعيد  القيمة <code>true</code> إن كان <code>num</code> و <code>numeric</code> من نفس النوع وكانت قيممهما متساوية.  
===[[Ruby/Numeric/fdiv | التابع fdiv]]===
===[[Ruby/Numeric/fdiv | التابع fdiv]]===
يعيد  ناتج القسمة العشرية.
يعيد  ناتج القسمة العشرية.
سطر 100: سطر 100:
يعيد  القيمة <code>true</code> إن كان <code>num</code> عددًا منتهيًا (finite)، وإلا فسيعيد <code>false</code>.
يعيد  القيمة <code>true</code> إن كان <code>num</code> عددًا منتهيًا (finite)، وإلا فسيعيد <code>false</code>.
===[[Ruby/Numeric/floor | التابع floor]]===
===[[Ruby/Numeric/floor | التابع floor]]===
يعيد أكبر عدد من الأعداد الأصغر من أو تساوي <code>num</code> بدقة <code>ndigits</code> من الأرقام العشرية (القيمة الافتراضية هي 0).
يعيد التابع <code>floor</code> أكبر عدد من الأعداد الأصغر من أو تساوي العدد الذي استُدعي معه بدقة <code>ndigits</code> منزلا عشريًا (القيمة الافتراضية هي <code>0</code>).
===[[Ruby/Numeric/i | التابع i]]===
===[[Ruby/Numeric/i | التابع i]]===
يعيد  العدد التخيلي (imaginary number) المقابل. غير متوفر للأعداد العقدية.
يعيد  العدد التخيلي (imaginary number) المقابل. غير متوفر للأعداد العقدية.
سطر 107: سطر 107:
===[[Ruby/Numeric/imaginary | التابع imaginary]]===
===[[Ruby/Numeric/imaginary | التابع imaginary]]===
يعيد  الصفر.
يعيد  الصفر.
===[[Ruby/Numeric/infinite-3F | التابع infinite?]]===
===[[Ruby/Numeric/infinite-3F | التابع infinite?]]===
يعيد القيمة <code>nil</code> أو -1 أو 1 اعتمادًا على ما إن كانت القيمة منتهية (finite) أو <code>-Infinity</code> أو <code>+Infinity</code>.
يعيد القيمة <code>nil</code> أو ‎<code>-1</code> أو <code>1</code> اعتمادًا على ما إن كانت القيمة منتهية (finite) أو تساوي ‎<code>-Infinity</code> أو ‎<code>+Infinity</code>.
===[[Ruby/Numeric/integer-3F | التابع integer?]]===
===[[Ruby/Numeric/integer-3F | التابع integer?]]===
يعيد <code>true</code> إن كان <code>num</code> من النوع <code>Integer</code>.
يعيد <code>true</code> إن كان <code>num</code> من النوع <code>Integer</code>.
===[[Ruby/Numeric/magnitude | التابع magnitude]]===
===[[Ruby/Numeric/magnitude | التابع magnitude]]===
يعيد القيمة المطلقة لـ <code>num</code>.
يعيد القيمة المطلقة لـ <code>num</code>.
===[[Ruby/Numeric/modulo | التابع modulo]]===
===[[Ruby/Numeric/modulo | التابع modulo]]===
<code>x.modulo(y)</code> يكافئ <code>x-y*(x/y).floor</code>.
يعيد <code>x.modulo(y)</code> ناتج التعبير <code>x-y*(x/y).floor</code>.
===[[Ruby/Numeric/negative-3F | التابع negative?]]===
===[[Ruby/Numeric/negative-3F | التابع negative?]]===
يعيد <code>true</code> إن كان <code>num</code> أصغر من 0.
يعيد <code>true</code> إن كان <code>num</code> أصغر من 0.
سطر 122: سطر 122:
يعيد  البسط (numerator).
يعيد  البسط (numerator).
===[[Ruby/Numeric/phase | التابع phase]]===
===[[Ruby/Numeric/phase | التابع phase]]===
يعيد  القيمة 0 إن كانت القيمة موجبة ، أو pi خلاف ذلك.
يعيد  القيمة 0 إن كانت القيمة موجبة ، أو <code>pi</code> خلاف ذلك.
===[[Ruby/Numeric/polar | التابع polar]]===
===[[Ruby/Numeric/polar | التابع polar]]===
يعيد  المصفوفة [num.abs، num.arg].
يعيد  المصفوفة <code>[num.abs، num.arg]</code>.
===[[Ruby/Numeric/positive-3F | التابع positive?]]===
===[[Ruby/Numeric/positive-3F | التابع positive?]]===
يعيد <code>true</code> إن كان <code>num</code> أكبر من 0.
يعيد <code>true</code> إن كان <code>num</code> أكبر من 0.
===[[Ruby/Numeric/quo | التابع quo]]===
===[[Ruby/Numeric/quo | التابع quo]]===
يعيد ناتج القسمة الأكثر دقة (جذري [rational] للأعداد الصحيحة ، غشري [floats] للأعداد العشرية).
يعيد التابع <code>quo</code> ناتج القسمة الأكثر دقة (فيمة جذرية [rational] للأعداد الصحيحة ، وقيمة غشرية [floats] للأعداد العشرية).
===[[Ruby/Numeric/real | التابع real]]===
===[[Ruby/Numeric/real | التابع real]]===
يعيد  الكائن نفسه (self).
يعيد  الكائن نفسه (self).
===[[Ruby/Numeric/real-3F | التابع real?]]===
===[[Ruby/Numeric/real-3F | التابع real?]]===
يعيد  القيمة <code>true</code> إن كان <code>num</code> عددًا حقيقيا (أي ليس <code>Complex</code>).
يعيد  القيمة <code>true</code> إن كان <code>num</code> عددًا حقيقيا (أي ليس <code>Complex</code>).
===[[Ruby/Numeric/rect | التابع rect]]===
===[[Ruby/Numeric/rect | التابع rect]]===
يعيد  المصفوفة[num, 0].
يعيد  المصفوفة<code>[num, 0]</code>.
===[[Ruby/Numeric/rectangular | التابع rectangular]]===
===[[Ruby/Numeric/rectangular | التابع rectangular]]===
يعيد  المصفوفة [num, 0].
يعيد  المصفوفة <code>[num, 0]</code>.
===[[Ruby/Numeric/remainder | التابع remainder]]===
===[[Ruby/Numeric/remainder | التابع remainder]]===
<code>x.remainder(y)</code> يكافئ <code>x-y*(x/y).truncate</code>.
<code>x.remainder(y)</code> يكافئ <code>x-y*(x/y).truncate</code>.
===[[Ruby/Numeric/round | التابع round]]===
===[[Ruby/Numeric/round | التابع round]]===
يعيد العدد  <code>num</code> مُقرّبًا إلى أقرب قيمة مع دقة <code>ndigits</code> منزلًا عشريًا (القيمة الافتراضية هي 0).
يعيد التابع <code>round</code> العدد الذي استُدعي معه مُقرّبًا إلى أقرب قيمة بدقة <code>ndigits</code> منزلًا عشريًا (القيمة الافتراضية هي <code>0</code>).
===[[Ruby/Numeric/step | التابع step]]===
===[[Ruby/Numeric/step | التابع step]]===
يستدعي الكتلة المعطاة مع تمرير سلسلة من الأعداد إليها بدءًا من العدد <code>num</code>، بالخطوة <code>step</code> (قيمتها الافتراضية هي <code>1</code>) في كل استدعاء.
يستدعي التابع <code>step</code> الكتلة المعطاة مع تمرير سلسلة من الأعداد إليها بدءًا من العدد الذي استُدعي معه (<code>num</code>)، ويصعد بالخطوة <code>step</code> (قيمتها الافتراضية<code>1</code>) في كل استدعاء.
===[[Ruby/Numeric/to_c | التابع to_c]]===
===[[Ruby/Numeric/to_c | التابع to_c]]===
يعيد  القيمة كعدد عقدي.
يعيد  القيمة كعدد عقدي.
سطر 148: سطر 148:
يستدعي  التابع <code>to_i</code> الخاص بالصنف الفرعي (child class) لتحويل العدد  <code>num</code> إلى عدد صحيح.
يستدعي  التابع <code>to_i</code> الخاص بالصنف الفرعي (child class) لتحويل العدد  <code>num</code> إلى عدد صحيح.
===[[Ruby/Numeric/truncate | التابع truncate]]===
===[[Ruby/Numeric/truncate | التابع truncate]]===
يعيد العدد  <code>num</code> مُقتطعًا (نحو الصفر) إلى دقة <code>ndigits</code> منزلًا عشريًا (القيمة الافتراضية هي 0).
يعيد التابع <code>truncate</code> العدد الذي استُدعي معه مُقتطعًا (نحو الصفر) بدقة <code>ndigits</code> (انظر فقرة البنية العامة) منزلًا عشريًا (القيمة الافتراضية هي <code>0</code>).
===[[Ruby/Numeric/zero-3F | التابع zero?]]===
===[[Ruby/Numeric/zero-3F | التابع zero?]]===
يعيد  القيمة <code>true</code> إن كانت <code>num</code> قيمة هي الصفر.
يعيد  القيمة <code>true</code> إن كانت <code>num</code> قيمة هي الصفر.
==مصادر<span> </span>==
==مصادر<span> </span>==
*[http://ruby-doc.org/core-2.5.1/NotImplementedError.html قسم  الصنف Numeric في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/Numeric.html قسم  الصنف Numeric في توثيق روبي الرسمي.]
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>Numeric</code> في روبي}}</noinclude>
<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>Numeric</code> في روبي}}</noinclude>
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: Ruby Numeric]]
[[تصنيف: Ruby Numeric]]

مراجعة 00:34، 28 أكتوبر 2018

الصنف Numeric هو الصنف الذي يجب أن ترثه كل الأصناف العددية عالية المستوى.

يسمح الصنف Numeric بتحديد التخزين heap-allocated objects للكائنات. الأصناف العددية الأساسية الأخرى، مثل Integer، تُنزّل كأصناف آنية، والذي يعني أنّ كل عدد صحيح هو كائن غير قابل للتغيير (immutable)، والذي بُمرر دائمًا بقيمته.

a = 1
1.object_id == a.object_id   #=> true

وهكذا لا يمكن أن يكون هناك إلا نسخة (instance) واحدة فقط من العدد الصحيح 1. تضمن روبي هذا عن طريق منع إنشاء نسخ جديدة ومنع التكرار.

Integer.new(1)   #=> NoMethodError: undefined method `new' for Integer:Class
1.dup            #=> TypeError: can't dup Integer

لهذا السبب، يجب استخدام الصنف Numeric عند تعريف أصناف عددية أخرى.

يجب أن تقوم الأصناف التي ترث من Numeric بتنزيل (implement) التابع coerce، والذي يعيد مصفوفة ثنائية تحتوي على كائن مُحوّل (coerced) إلى نسخة من الصنف الجديد والكائن self (انظر coerce).

يجب أيضا على الأصناف الوراثة بتنزيل توابع العمليات الحسابية (+ ، - ، * و /) والمعامل <=> (انظر الصنف Comparable). قد تعتمد هذه التوابع على coerce لضمان إمكانية التداخل (interoperability) مع نسخ الأصناف العددية الأخرى.

class Tally < Numeric
  def initialize(string)
    @string = string
  end

  def to_s
    @string
  end

  def to_i
    @string.size
  end

  def coerce(other)
    [self.class.new('|' * other.to_i), self]
  end

  def <=>(other)
    to_i <=> other.to_i
  end

  def +(other)
    self.class.new('|' * (to_i + other.to_i))
  end

  def -(other)
    self.class.new('|' * (to_i - other.to_i))
  end

  def *(other)
    self.class.new('|' * (to_i * other.to_i))
  end

  def /(other)
    self.class.new('|' * (to_i / other.to_i))
  end
end

tally = Tally.new('||')
puts tally * 2            #=> "||||"
puts tally > 1            #=> true

توابع النسخ العامة (Public Instance Methods)

التابع %

يعيد x.modulo(y)‎ ناتج التعبير x-y*(x/y).floor.

التابع +@

علامة الإضافة الأحادية (Unary Plus)

التابع -@

علامة ناقص الأحادية (Unary Minus)

التابع <=>

يعيد القيمة صفر إن كان number يساوي other، وإلا فسيُعيد nil.

التابع abs

يعيد القيمة المطلقة لـ num.

التابع abs2

يعيد مربع العدد الذي استُدعي معه.

التابع angle

يعيد القيمة 0 إن كانت القيمة موجبة، أو pi خلاف ذلك.

التابع arg

يعيد القيمة 0 إن كانت القيمة موجبة، أو pi خلاف ذلك.

التابع ceil

يعيد التابع ceil أصغر عدد من الأعداد الأكبر من أو تساوي العدد الذي استُدعي معه بدقة ndigits موضعا عشريًا (القيمة الافتراضية هي 0).

التابع clone

يعيد الكائن الذي استُدعي معه.

التابع coerce

إن كان numeric من نفس نوع num، فستُعاد مصفوفة [numeric, num]. خلاف ذلك، ستٌعاد مصفوفة مع numeric و num ممثلين كعددين عشريين (Float).

التابع conj

يعيد الكائن self.

التابع conjugate

يعيد الكائن self.

التابع denominator

يعيد المقام (denominator)، ويكون دائمًا موجبًا.

التابع div

يستخدم العملية / لإجراء القسمة، ثم يحوّل النتيجة إلى عدد صحيح.

التابع divmod

يعيد التابع divmod مصفوفة تحتوي على الحاصل (quotient) والباقي الناتج عن قسمة العدد الذي استُدعي معه على الوسيط المعطى numeric.

التابع dup

يعيد الكائن الذي استُدعي معه.

التابع eql?‎

يعيد القيمة true إن كان num و numeric من نفس النوع وكانت قيممهما متساوية.

التابع fdiv

يعيد ناتج القسمة العشرية.

التابع finite?

يعيد القيمة true إن كان num عددًا منتهيًا (finite)، وإلا فسيعيد false.

التابع floor

يعيد التابع floor أكبر عدد من الأعداد الأصغر من أو تساوي العدد الذي استُدعي معه بدقة ndigits منزلا عشريًا (القيمة الافتراضية هي 0).

التابع i

يعيد العدد التخيلي (imaginary number) المقابل. غير متوفر للأعداد العقدية.

التابع imag

يعيد الصفر.

التابع imaginary

يعيد الصفر.

التابع infinite?‎

يعيد القيمة nil أو ‎-1 أو 1 اعتمادًا على ما إن كانت القيمة منتهية (finite) أو تساوي ‎-Infinity أو ‎+Infinity.

التابع integer?‎

يعيد true إن كان num من النوع Integer.

التابع magnitude

يعيد القيمة المطلقة لـ num.

التابع modulo

يعيد x.modulo(y)‎ ناتج التعبير x-y*(x/y).floor.

التابع negative?

يعيد true إن كان num أصغر من 0.

التابع nonzero?

يعيد self إن كان num يخالف الصفر، أو nil خلاف ذلك.

التابع numerator

يعيد البسط (numerator).

التابع phase

يعيد القيمة 0 إن كانت القيمة موجبة ، أو pi خلاف ذلك.

التابع polar

يعيد المصفوفة [num.abs، num.arg].

التابع positive?

يعيد true إن كان num أكبر من 0.

التابع quo

يعيد التابع quo ناتج القسمة الأكثر دقة (فيمة جذرية [rational] للأعداد الصحيحة ، وقيمة غشرية [floats] للأعداد العشرية).

التابع real

يعيد الكائن نفسه (self).

التابع real?‎

يعيد القيمة true إن كان num عددًا حقيقيا (أي ليس Complex).

التابع rect

يعيد المصفوفة[num, 0].

التابع rectangular

يعيد المصفوفة [num, 0].

التابع remainder

x.remainder(y)‎ يكافئ x-y*(x/y).truncate.

التابع round

يعيد التابع round العدد الذي استُدعي معه مُقرّبًا إلى أقرب قيمة بدقة ndigits منزلًا عشريًا (القيمة الافتراضية هي 0).

التابع step

يستدعي التابع step الكتلة المعطاة مع تمرير سلسلة من الأعداد إليها بدءًا من العدد الذي استُدعي معه (num)، ويصعد بالخطوة step (قيمتها الافتراضية1) في كل استدعاء.

التابع to_c

يعيد القيمة كعدد عقدي.

التابع to_int

يستدعي التابع to_i الخاص بالصنف الفرعي (child class) لتحويل العدد num إلى عدد صحيح.

التابع truncate

يعيد التابع truncate العدد الذي استُدعي معه مُقتطعًا (نحو الصفر) بدقة ndigits (انظر فقرة البنية العامة) منزلًا عشريًا (القيمة الافتراضية هي 0).

التابع zero?‎

يعيد القيمة true إن كانت num قيمة هي الصفر.

مصادر