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

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: صفحة الصنف <code>ConditionVariable</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Ruby ConditionVariable ي...'
 
لا ملخص تعديل
سطر 2: سطر 2:
[[تصنيف: Ruby]]
[[تصنيف: Ruby]]
[[تصنيف: Ruby ConditionVariable]]
[[تصنيف: Ruby ConditionVariable]]
يمكن تمثيل الأعداد العقدية (تُسمّى أيضًا أعدادًا مركبة) كزوج مكون من عدد حقيقي ووحدة تخلية (العدد <code>i</code>) ؛ وفق الشكل <code>a+bi</code>، حيث <code>a</code> هو الجزء الحقيقي، و <code>b</code> هو الجزء التخيلي و <code>i</code> هو الوحدة الخيالية.
ترفع كائنات الصنفِ <code>ConditionVariable</code> الصنفَ <code>[[Ruby/Mutex|Mutex]]</code>. فباستخدام المتغيرات الشرطية، من الممكن إيقاف مهمة حرجة (critical section) في أثناء تنفيذها  إلى حين إتاحة مورد ما.


العدد الحقيقي <code>a</code> يساوي رياضياتيًا العدد العقدي <code>a+0i</code>.
إليك الأمثلة التالية:<syntaxhighlight lang="ruby">
mutex = Mutex.new
resource = ConditionVariable.new


يمكن إنشاء الأعداد العقدية بطريقة حرفية، وأيضا باستخدام التوابع <code>Kernel#Complex</code> أو  ‏‎<code>::rect</code> أو  ‏‎:<code>:polar</code> أو <code>‎#to_c.</code> إليك الأمثلة التالية:<syntaxhighlight lang="ruby">
a = Thread.new {
2+1i                #=> (2+1i)
  mutex.synchronize {
Complex(1)          #=> (1+0i)
    # Thread 'a' now needs the resource
Complex(2, 3)        #=> (2+3i)
    resource.wait(mutex)
Complex.polar(2, 3)  #=> (-1.9799849932008908+0.2822400161197344i)
    # 'a' can now have the resource
3.to_c              #=> (3+0i)
  }
</syntaxhighlight>يمكنك أيضا إنشاء الكائنات العقدية من الأعداد من النوع  <code>float</code> أو من السلاسل النصية كما توضح الأمثلة التالية:<syntaxhighlight lang="ruby">
}
Complex(0.3)        #=> (0.3+0i)
 
Complex('0.3-0.5i')  #=> (0.3-0.5i)
b = Thread.new {
Complex('2/3+3/4i')  #=> ((2/3)+(3/4)*i)
  mutex.synchronize {
Complex('1@2')      #=> (-0.4161468365471424+0.9092974268256817i)
    # Thread 'b' has finished using the resource
    resource.signal
  }
}


0.3.to_c            #=> (0.3+0i)
'0.3-0.5i'.to_c      #=> (0.3-0.5i)
'2/3+3/4i'.to_c      #=> ((2/3)+(3/4)*i)
'1@2'.to_c          #=> (-0.4161468365471424+0.9092974268256817i)
</syntaxhighlight>تُصنّف الأعداد العقدية إلى مضبوطة (exact) و غير مضبوطة:<syntaxhighlight lang="ruby">
Complex(1, 1) / 2    #=> ((1/2)+(1/2)*i)
Complex(1, 1) / 2.0  #=> (0.5+0.5i)
</syntaxhighlight>
</syntaxhighlight>
==الثوابت==
 
===[[Ruby/Complex/I|الثابت التخيلي <code>I</code>]]===
يمثل الثابت <code>i</code> العدد التخيلي للأعداد العقدية.
==توابع الصنف العامة (Public Class Methods)==
==توابع الصنف العامة (Public Class Methods)==
===[[Ruby/Complex/polar|التابع <code>polar</code>]]===
===[[Ruby/Complex/polar|التابع <code>polar</code>]]===
يعيد التابع ‎<code>polar</code> عددا عقديا وفق الشكل القطبي (polar form).
 
===[[Ruby/Complex/rect|التابع <code>rect</code>]]===
===[[Ruby/Complex/rect|التابع <code>rect</code>]]===
يعيد التابع ‎<code>rect</code> عددا عقديا وفق الشكل الجبري أو المستطيلي (rectangular form).
 
===[[Ruby/Complex/rectangular|التابع <code>rectangular </code>]]===
===[[Ruby/Complex/rectangular|التابع <code>rectangular </code>]]===
يعيد التابع ‎<code>rectangular</code> عددا عقديا وفق الشكل الجبري أو المستطيلي (rectangular form).
==توابع الكائن العامة (Public Instance Methods)==
===[[Ruby/Complex/star|المعامل <code>*</code>]]===
يؤدي المعامل ‎<code>*</code>عملية الضرب على الأعداد العقدية.
===[[Ruby/Complex/exp|المعامل <code>**</code>]]===
يؤدي المعامل ‎<code>**</code>عملية الأسّ (exponentiation) على الأعداد العقدية.
===[[Ruby/Complex/plus|المعامل <code>+</code>]]===
يؤدي المعامل ‎<code>+</code>عملية الجمع على الأعداد العقدية.
===[[Ruby/Complex/-|المعامل <code>-</code>]]===
يؤدي المعامل ‎<code>-</code>عملية الطرح على الأعداد العقدية.
===[[Ruby/Complex/negation|معامل النفي <code>-</code>]]===
يعيد معامل النفي ‎<code>-</code> نفي (مقابل) العدد العقدي. 
===[[Ruby/Complex/div|المعامل <code>/</code>]]===
يؤدي المعامل ‎<code>/</code>عملية القسمة على الأعداد العقدية.
===[[Ruby/Complex/equality operator|المعامل <code>==</code>]]===
يتحقق المعامل ‎<code>==</code>من تساوي عددين عقديين.
===[[Ruby/Complex/abs|التابع <code>abs</code>]]===
يعيد التابع ‎<code>abs</code> منظم (القيمة المطلقة) للعدد العقدي الذي استدعي معه.
===[[Ruby/Complex/abs2|التابع <code>abs2</code>]]===
يعيد  التابع ‎<code>abs2</code> مربع القيمة المطلقة للعدد العقدي الذي استدعي معه.
===[[Ruby/Complex/angle|التابع ‎<code>angle</code>]]===
يعيد  التابع ‎<code>angle</code> الجزء الزاوري (angle part) للشكل القطبي للعدد العقدي الذي استدعي معه.
===[[Ruby/Complex/arg|التابع <code>arg</code>]]===
يعيد التابع ‎<code>arg</code> منظم (arg  part) العدد العقدي الذي استدعي معه وفق الشكل القطبي.
===[[Ruby/Complex/arg|التابع <code>arg</code>]]===
يعيد التابع ‎<code>conj</code> مرافق العدد العقدي.
===[[Ruby/Complex/arg|التابع <code>conjugate</code>]]===
يعيد التابع ‎<code>conjugate</code> مرافق العدد العقدي. 
===[[Ruby/Complex/denominator|التابع <code>denominator</code>]]===
يعيد التابع ‎<code>denominator</code> قاسم (denominator) العدد العقدي، أي المضاعف المشترك الأصغر (lcm) للجزءين الحقيقي والتخيلي.
===[[Ruby/Complex/fdiv|التابع <code>fdiv</code>]]===
يقوم التابع ‎<code>fdiv</code> بعملية القسمة على العدد العقدي.
===[[Ruby/Complex/finite|التابع <code>finite?‎</code>]]===
يتحقق التابع ‎<code>finite?‎</code> مما إذا كانت القيمة المطلقة (absolute part) للشكل القطبي للعدد العقدي الذي استُدعي معه منتهيًا (finite). 
===[[Ruby/Complex/imag|التابع <code>imag</code>]]===
يعيد التابع ‎<code>imag</code> الجزء التخيلي للعدد العقدي. 
===[[Ruby/Complex/imaginary|التابع <code>imaginary</code>]]===
يعيد التابع ‎<code>imaginary</code> الجزء التخيلي (imaginary part) للعدد العقدي. 
===[[Ruby/Complex/infinite|التابع <code>‎infinite?‎</code>]]===
يعيد التابع ‎<code>infinite?‎</code> قيمة بحسب ما إذا كانت القيمة المطلقة (absolute part) للشكل القطبي للعدد العقدي منتهية أو غير منتهية (infinite).
[[Ruby/Complex/inspect|التابع <code>inspect</code>]]
يعيد التابع ‎<code>inspect</code> العدد العقدي على شكل سلسلة نصية لأجل التفتيش (inspection). 
[[Ruby/Complex/magnitude|التابع <code>magnitude</code>]]
يعيد التابع ‎<code>magnitude</code> الجزء المطلق (absolute part) للشكل القطبي للعدد العقدي.
===[[Ruby/Complex/numerator|التابع <code>‎numerator‎</code>]]===
يعيد التابع ‎<code>numerator</code> مقام (numerator) العدد العقدي. 
===[[Ruby/Complex/phase|التابع <code>phase</code>]]===
 يعيد التابع ‎<code>phase</code> الجزء الزاوي (angle part) للشكل القطبي للعدد العقدي الذي استُدعي معه.
===[[Ruby/Complex/quo|التابع <code>quo</code>]]===
يؤدي التابع ‎<code>quo</code>عملية القسمة على الأعداد العقدية.
===[[Ruby/Complex/rationalize|التابع <code>rationalize</code>]]===
يعيد التابع ‎<code>rationalize</code> القيمة الجذرية (rational ) المقابلة للعدد العقدي. ينبغي أن يكون الجزء التخيلي معدوما. 
[[Ruby/Complex/real|التابع <code>real</code>]]
يعيد التابع ‎<code>real</code> الجزء الحقيقي (real part) للعدد العقدي.
=== [[Ruby/Complex/real-3F|التابع <code>real?‎ </code>]] ===
يعيد التابع ‎<code>real?‎</code> القيمة <code>false</code> دائمًا. 
=== [[Ruby/Complex/to c|التابع <code>to_c</code>]] ===
يعيد التابع ‎<code>to_c</code> العدد العقدي نفسه. 
=== [[Ruby/Complex/to f|التابع <code>to_f</code>]] ===
يعيد التابع ‎<code>to_f</code> العدد العقدي الذي استدعي معه على شكل عدد من النوع <code>float</code> إن كان ذلك ممكنًا (ينبغي أن يساوي الجزء التخيلي العدد 0 تمامًا، وإلا فسيطلق الخطأ <code>RangeError</code>).
=== [[Ruby/Complex/to i|التابع <code>to_i</code>]] ===
يعيد التابع ‎<code>to_i</code> العدد العقدي الذي استدعي معه على شكل عدد صحيح من النوع <code>integer</code> إن كان ذلك ممكنًا (ينبغي أن يساوي الجزء التخيلي العدد 0 تمامًا، وإلا فسيطلق الخطأ <code>RangeError</code>).


=== [[Ruby/Complex/to s|التابع <code>to_s</code>]] ===
يعيد التابع ‎<code>to_s</code> العدد العقدي الذي استدعي معه على شكل سلسلة نصية.
===[[Ruby/Complex/to r|التابع <code>to_r</code>]]===
يعيد التابع ‎<code>to_r</code> القيمة الجذرية (rational ) المقابلة للعدد العقدي. ينبغي أن يكون الجزء التخيلي معدوما. 
==مصادر==
==مصادر==
<span> </span>
*[http://ruby-doc.org/core-2.5.1/Complex.html قسم  الصنف Complex في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/Complex.html قسم  الصنف Complex في توثيق روبي الرسمي.]

مراجعة 08:35، 15 سبتمبر 2018

ترفع كائنات الصنفِ ConditionVariable الصنفَ Mutex. فباستخدام المتغيرات الشرطية، من الممكن إيقاف مهمة حرجة (critical section) في أثناء تنفيذها إلى حين إتاحة مورد ما.

إليك الأمثلة التالية:

mutex = Mutex.new
resource = ConditionVariable.new

a = Thread.new {
   mutex.synchronize {
     # Thread 'a' now needs the resource
     resource.wait(mutex)
     # 'a' can now have the resource
   }
}

b = Thread.new {
   mutex.synchronize {
     # Thread 'b' has finished using the resource
     resource.signal
   }
}

توابع الصنف العامة (Public Class Methods)

التابع polar

التابع rect

التابع rectangular 

مصادر