الفرق بين المراجعتين لصفحة: «Ruby/Numeric»
لا ملخص تعديل |
لا ملخص تعديل |
||
سطر 58: | سطر 58: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==توابع | ==توابع النسخ العامة (Public Instance Methods)== | ||
===[[Ruby/Numeric/ | === [[Ruby/Numeric/mod|التابع %]]=== | ||
يعيد <code>x.modulo(y)</code> ناتج التعبير <code>x-y*(x/y).floor</code>. | |||
===[[Ruby/Numeric/ | === [[Ruby/Numeric/plus|التابع +@]]=== | ||
علامة الإضافة الأحادية (Unary Plus) | علامة الإضافة الأحادية (Unary Plus) | ||
===[[Ruby/Numeric/ | === [[Ruby/Numeric/minus|التابع -@]]=== | ||
علامة ناقص الأحادية (Unary Minus) | علامة ناقص الأحادية (Unary Minus) | ||
===[[Ruby/Numeric/ | === [[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>ceil</code> أصغر عدد من الأعداد الأكبر من أو تساوي العدد الذي استُدعي معه بدقة <code>ndigits</code> موضعا عشريًا (القيمة الافتراضية هي 0). | ||
===[[Ruby/Numeric/clone | التابع clone]]=== | ===[[Ruby/Numeric/clone | التابع clone]]=== | ||
يعيد الكائن الذي استُدعي معه. | يعيد الكائن الذي استُدعي معه. | ||
===[[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>/</code> لإجراء القسمة، ثم يحوّل النتيجة إلى عدد صحيح. | ||
===[[Ruby/Numeric/divmod | التابع divmod]]=== | ===[[Ruby/Numeric/divmod | التابع divmod]]=== | ||
يعيد | يعيد التابع <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> من نفس النوع وكانت قيممهما متساوية | يعيد القيمة <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>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> أو <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.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]]=== | ||
يعيد | يعيد التابع <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.remainder(y)</code> يكافئ <code>x-y*(x/y).truncate</code>. | ||
===[[Ruby/Numeric/round | التابع round]]=== | ===[[Ruby/Numeric/round | التابع round]]=== | ||
يعيد | يعيد التابع <code>round</code> العدد الذي استُدعي معه مُقرّبًا إلى أقرب قيمة بدقة <code>ndigits</code> منزلًا عشريًا (القيمة الافتراضية هي <code>0</code>). | ||
===[[Ruby/Numeric/step | التابع step]]=== | ===[[Ruby/Numeric/step | التابع step]]=== | ||
يستدعي | يستدعي التابع <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>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/ | *[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
قيمة هي الصفر.