الفرق بين المراجعتين لصفحة: «Ruby/Topics»
جميل-بيلوني (نقاش | مساهمات) لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط إضافة القسم "تثبيت روبي" و "حول روبي". |
||
(6 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 1: | سطر 1: | ||
== [[Ruby/install|تثبيت روبي]] == | |||
توجد طرائق عدَّة لتنزيل وتثبيت روبي على كل منصة وهي: إمَّا استعمال أنظمة مدير الحزم، أو باستعمال المثبِّتات التلقائية، أو باستعمال مدراء روبي. هنالك طريقة أخرى يمكنك بالتأكيد استعمالها لتثبيت روبي وتصريف شيفراتها وهي بنائها من الشيفرة المصدرية مباشرةً. | |||
== [[Ruby/about|حول روبي]] == | |||
يوفر هذا القسم لمحة سريعة عن لغة روبي ونشأتها، وتطورها، ومزاياها التي انفردت بها عن اللغات الأخرى، والتنفيذات المختلفة التي تملكها. | |||
==البنية العامة== | ==البنية العامة== | ||
===بنية اللغة=== | ===بنية اللغة=== | ||
تعد روبي مزيجًا من اللغات البرمجية التالية: Perl، و Smalltalk، و Eiffel، و Ada، و Lisp وغيرها. انبثق عن هذا المزيج لغة برمجية جديدة حققت التوازن بين البرمجة الوظيفية (functional programming) والبرمجة الأمرية (imperative programming). بنية لغة روبي مشابهة إلى حد كبير بنية لغة Perl و [[Python]]. | |||
الفاصل السطري مهم جدًا في روبي، إذ يُعدُّ نهايةً لأي تعبير برمجي عوضًا عن الفاصلة المنقوطة. مع ذلك، يمكن استعمال الفاصلة المنقوطة لأداء الغرض ذاته. بشكل مخالف لبايثون، المسافة البادئة (indentation) غير مهمة على الإطلاق.<syntaxhighlight lang="ruby"> | |||
puts "Hello World!" | |||
</syntaxhighlight>لغة روبي هي لغة كائنية التوجه، إذ يعدُّ كل شيء فيها كائنًا؛ أي يمكن أن يُعطَى كل بت من المعلومات أو الشيفرة خاصيات وأحداث خاصة به. تدعى الخاصيات في اللغة كائنية التوجه "متغيرات النسخة" (instance variables) والأحداث "توابع" (methods). يظهر ذلك جليًّا في السطر البرمجي الآتي عبر تطبيق حدثٍ على عددٍ:<syntaxhighlight lang="ruby"> | |||
5.times { print "We *love* Ruby -- it's outrageous!" } | |||
</syntaxhighlight>في أغلب لغات البرمجة، لا تعد الأعداد والأنواع الأساسية كائناتٍ. أمَّا في روبي، فإنَّها تمنح جميع الأنواع فيها توابع ومتغيرات نسخة، إذ تأثرت في ذلك من لغة البرمجة Smalltalk. | |||
الكتلة <code>block</code> في روبي هي من أكثر الأمور التي تعطي لهذه اللغة المرونة الكبيرة. يستطيع المبرمج أن يرفق كتلة برمجية مع أي تابع لتوجيهه إلى السلوك الذي يجب على هذا التابع أن يسلكه. أُخذَت هذه الميزة من اللغات الوظيفية تحديدًا لغة Lisp. إليك المثال البسيط التالي الذي يشرح كيفية استعمال الكتلة:<syntaxhighlight lang="ruby"> | |||
search_engines = | |||
%w[Google Yahoo MSN].map do |engine| | |||
"http://www." + engine.downcase + ".com" | |||
end | |||
</syntaxhighlight>في هذا المثال، يطبِّق التابع الكتلة - المحدَّدة بين الكلمتين <code>do ... end</code> - على كل كلمة من الكلمات المعطاة. | |||
رغم أنَّ روبي تستعمل علامات الترقيم والرموز بشكل محدود جدًا وتفضل استعمال الكلمات المفتاحة عوضًا عنها إلا أنَّ هنالك بعض العلامات الموجودة والمستعملة. يستعمل بعض هذه الرموز والعلامات لتحديد نطاق المتغيرات؛ تذكر أنَّك لا تحتاج في روبي إلى التصريح عن متغير بأسلوب محدَّد. | |||
* <code>var</code>: يمكن أن يكون متغيِّرًا محليًّا. | |||
* <code>var@</code>: هو متغير نسخة. | |||
* <code>var$</code>: هو متغير عام. | |||
===[[Ruby/assignment|الإسناد]]=== | ===[[Ruby/assignment|الإسناد]]=== | ||
لكي نسند شيئًا في لغة روبي، نستخدم رمز المساواة <code>=</code>؛ ففي المثال التّالي، يُسنَد العدد 5 إلى المتغيّر <code>v</code> المحلّي:<syntaxhighlight lang="ruby"> | لكي نسند شيئًا في لغة روبي، نستخدم رمز المساواة <code>=</code>؛ ففي المثال التّالي، يُسنَد العدد 5 إلى المتغيّر <code>v</code> المحلّي:<syntaxhighlight lang="ruby"> | ||
سطر 76: | سطر 102: | ||
==الأصناف والوحدات== | ==الأصناف والوحدات== | ||
===[[Ruby/ARGF|ARGF]]=== | ===[[Ruby/ARGF|<code>ARGF</code>]]=== | ||
===[[Ruby/ArgumentError|ArgumentError]]=== | الصنف <code>ARGF</code> هو مجرى (stream) صُمِّم ليُستخدَم في الملفات البرمجية (scritps) التي تُعالج الملفات المُمرَّرة إليها على شكل وسائط في سطر الأوامر (command-line arguments)، أو المُمرَّرة عبر مجرى الدخل القياسي (STDIN). | ||
===[[Ruby/Array|Array]]=== | |||
===[[Ruby/BasicObject|BasicObject]]=== | ===[[Ruby/ArgumentError|<code>ArgumentError</code>]]=== | ||
===[[Ruby/Binding|Binding]]=== | يُطلق الاستثناء <code>ArgumentError</code> عندما تكون الوسائط (arguments) غير صالحة، ولا يكون هناك صنف <code>[[Ruby/Exception|Exception]]</code> أكثر تحديدًا. | ||
===[[Ruby/ClosedQueueError|ClosedQueueError]]=== | ===[[Ruby/Array|<code>Array</code>]]=== | ||
===[[Ruby/Comparable|Comparable]]=== | المصفوفات هي مجموعات مُرتَّبة ومُفهرسة بالأعداد الصحيحة (integer-indexed) ومُكونة من أي نوع من الكائنات. | ||
===[[Ruby/Complex|Complex]]=== | |||
===[[Ruby/Complex::compatible|Complex::compatible]]=== | ===[[Ruby/BasicObject|<code>BasicObject</code>]]=== | ||
===[[Ruby/ConditionVariable|ConditionVariable]]=== | الصنف <code>BasicObject</code> هو الصنف الأب لجميع الأصناف في روبي، وهو صنف فارغ. | ||
===[[Ruby/Continuation|Continuation]]=== | |||
===[[Ruby/Data|Data]]=== | ===[[Ruby/Binding|<code>Binding</code>]]=== | ||
===[[Ruby/Dir|Dir]]=== | تُغلِّف كائنات الصنف <code>Binding</code> سياق التنفيذ (execution context) في مكان معين في الشيفرة البرمجية، وتحتفظ بذلك السياق لاستخدامه مستقبلًا. يُحتفَظ بالمتغيرات، والتوابع، وقيمة<code>self</code>، وربما كتلة المكرر (iterator block) وكل ما يمكن الوصول إليه في هذا السياق. يمكن إنشاء كائنات الصنف <code>Binding</code> باستخدام التابع <code>Kernel.binding</code>، واستدعاؤها بوساطة التابع <code>Kernel.set_trace_func</code>. | ||
== | |||
===[[Ruby/Class|<code>Class</code>]]=== | |||
===[[Ruby/ | تُعدُّ الأصناف كائناتٍ من الدرجة الأولى (first-class objects) في روبي، وتعدُّ جميعها نُسخٌ من الصنف <code>Class</code>. | ||
===[[Ruby/Encoding | ===[[Ruby/ClosedQueueError|<code>ClosedQueueError</code>]]=== | ||
===[[Ruby/Encoding:: | ===[[Ruby/Comparable|<code>Comparable</code>]]=== | ||
يُستخدم المخلوط (mixin) <code>Comparable</code> من قبل الأصناف التي يمكن ترتيب كائناتها. يجب أن يحدِّد الصنفُ المعاملَ <code><=></code> ، الذي يوازن الكائن المستقبِل (receiver) مع كائن آخر ، ويعيد -1، أو 0، أو +1 إن كان المُستقبِل أصغر من الكائن الآخر، أو يساويه، أو أكبر منه على التوالي. | |||
===[[Ruby/Encoding:: | |||
===[[Ruby/ | ===[[Ruby/Complex|<code>Complex</code>]]=== | ||
===[[Ruby/ | يمكن تمثيل الأعداد العقدية (تُسمّى أيضًا أعدادًا مركبةً [complex number]) كزوج مكون من عدد حقيقي ووحدة تخلية (العدد <code>i</code>) وفق الشكل <code>a+bi</code>، إذ <code>a</code> هو الجزء الحقيقي، و <code>b</code> هو الجزء التخيلي و <code>i</code> هو الوحدة الخيالية. | ||
===[[Ruby/ | ===[[Ruby/Complex::compatible|<code>Complex::compatible</code>]]=== | ||
===[[Ruby/ConditionVariable|<code>ConditionVariable</code>]]=== | |||
===[[Ruby/ | توسع كائنات الصنف <code>ConditionVariable</code> عمل الصنف <code>[[Ruby/Mutex|Mutex]]</code>. فمن الممكن باستخدام المتغيرات الشرطية إيقاف مهمة حرجة (critical section) في أثناء تنفيذها إلى حين إتاحة مورد ما. | ||
===[[Ruby/ | ===[[Ruby/Continuation|<code>Continuation</code>]]=== | ||
===[[Ruby/ | تُولّد الكائنات <code>Continuation</code> بواسطة التابع <code>Kernel.callcc</code> بعد استيراد <code>continuation</code> عبر <code>require</code>. تحمل هذه الكائنات عنوان العودة (return address) وسياق التنفيذ (execution context)، مما يتيح العودة إلى نهاية الكتلة <code>callcc</code> من أي مكان في البرنامج. | ||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/Data|<code>Data</code>]]=== | ||
الصنف <code>Data</code> هو صنف مهمل. كان يعدُّ الصنف الأساس لملحقات C التي تستعمل <code>Data_Make_Struct</code> أو <code>Data_Wrap_Struct</code>. | |||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/Dir|<code>Dir</code>]]=== | ||
كائنات الصنف <code>Dir</code> هي مجاري مجلدات (directory streams) تمثِّل الجلدات في نظام الملفات الأساسي لنظام التشغيل. فهي توفر طرائق متعددة لعرض المجلدات ومحتوياتها. انظر أيضًا صفحة الصنف <code>File</code> لمزيد من المعلومات. | |||
===[[Ruby/ | |||
===[[Ruby/ENV|<code>ENV</code>]]=== | |||
يشبه الصنف <code>ENV</code> الجداول <code>[[Ruby/Hash|Hash]]</code> كثيرًا ويُستعمل للوصول إلى متغيرات البيئة. | |||
===[[Ruby/ | ===[[Ruby/EOFError|<code>EOFError</code>]]=== | ||
===[[Ruby/ | يٌطلَق الخطأ <code>EOFError</code> من طرف بعض عمليات الصنف <code>[[Ruby/IO|IO]]</code> عندما تصل إلى نهاية الملف. | ||
===[[Ruby/ | |||
===[[Ruby/Encoding|<code>Encoding</code>]]=== | |||
===[[Ruby/ | يمثل الصنف <code>Encoding</code> ترميز المحارف الذي يمكننا استخدامه في لغة روبي. | ||
===[[Ruby/ | |||
===[[Ruby/Encoding::CompatibilityError|<code>Encoding::CompatibilityError</code>]]=== | |||
===[[Ruby/ | يُرمى الاستثناء <code>CompatibilityError</code> من قبل توابع الصّنفين <code>String</code> و <code>[[Ruby/Encoding|Encoding]]</code> عندما لا يتوافق ترميز المصدر مع ترميز الهدف. | ||
===[[Ruby/Encoding::Converter|<code>Encoding::Converter</code>]]=== | |||
===[[Ruby/ | يُستعمَل الصنف <code>Encoding::Converter</code> في عمليات تحويل الترميز في السلاسل النصية. | ||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/Encoding::ConverterNotFoundError|<code>Encoding::ConverterNotFoundError</code>]]=== | ||
===[[Ruby/ | يُرمى الاستثناء <code>ConverterNotFoundError</code> من قبل توابع تبديل التّرميز (transcoding) عندما لا يتوافق ترميزٌ باسمٍ معيّنٍ مع محوّلٍ (converter) محدَّد. | ||
===[[Ruby/ | |||
===[[Ruby/Encoding::InvalidByteSequenceError|<code>Encoding::InvalidByteSequenceError</code>]]=== | |||
يُرمَى الاستنثناء <code>InvalidByteSequenceError</code> من قبل توابع الصّنفين <code>String</code> و <code>[[Ruby/Encoding|Encoding]]</code> عندما تحوي السّلسلة النّصية التي يجري تحويل ترميزها بايتًا غير صالح إما للتّرميز المصدر أو التّرميز الهدف المراد التحويل إليه. | |||
===[[Ruby/Encoding::UndefinedConversionError|<code>Encoding::UndefinedConversionError</code>]]=== | |||
يُرمَى الاستثناء <code>UndefinedConversionError</code> من قبل توابع الصّنفين <code>String</code> و <code>[[Ruby/Encoding|Encoding]]</code> عندما تفشل عملية تبديل التّرميز (transcoding). | |||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/EncodingError|<code>EncodingError</code>]]=== | ||
===[[Ruby/ | يُمثِّل الصنف <code>EncodingError</code> الصِّنفَ القاعديَّ (base class) لجميعِ أخطاء التّرميز (الصنف <code>[[Ruby/Encoding|Encoding]]</code>). | ||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/Enumerable|<code>Enumerable</code>]]=== | ||
===[[Ruby/ | يوفر المخلوط <code>Enumerable</code> مجموعة من الأصناف مع توابع تنقل (traversal) وبحث عديدة قادرة على ترتيب عناصر مجموعة مع بعضها بعضًا. | ||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/Enumerator|<code>Enumerator</code>]]=== | ||
===[[Ruby/ | الصنف <code>Enumerator</code> هو صنفٌ يسمح بتنفيذ عملية التكرار الداخلي والخارجي. | ||
===[[Ruby/ | ===[[Ruby/Enumerator::Generator|<code>Enumerator::Generator</code>]]=== | ||
===[[Ruby/ | ===[[Ruby/Enumerator::Lazy|<code>Enumerator::Lazy</code>]]=== | ||
===[[Ruby/ | الصنف <code>Enumerator::Lazy</code> هو صنف يسمح بعملية التكرار - مثل الصنف <code>[[Ruby/Enumerator|Enumerator]]</code> - ولكن بالنمط الكسول (lazy fashion). | ||
===[[Ruby/ | ===[[Ruby/Enumerator::Yielder|<code>Enumerator::Yielder</code>]]=== | ||
===[[Ruby/Errno|<code>Errno</code>]]=== | |||
تُنشَأ الوحدة <code>Errno</code> ديناميكيًّا لتنظيم تفاصيل الأخطاء تُبلِّغ أنظمة عنها وإرسالها إلى أصناف روبي، مع توليد صنف فرعي من الصنف <code>[[Ruby/SystemCallError|SystemCallError]]</code> خاص بكل رقم خطأٍ. | |||
===[[Ruby/ | |||
===[[Ruby/Exception|<code>Exception</code>]]=== | |||
===[[Ruby/ | تُستخدَم الكائنات السليلة من الصنف <code>Exception</code> للتواصل بين التّابع <code>[[Ruby/Kernel/raise|Kernel.raise]]</code> وتصريحات <code>rescue</code> في الكتل (blocks) من الشكل <code>[[Ruby/miscellaneous#BEGIN .D9.88 END|begin...end]]</code>. تَحمل كائنات الصنف<code>Exception</code> معلوماتٍ عن الاستثناء المَرمي مثل نوعه (اسم صنف الاستثناء)، وسلسلةً نصيّةً وصفيّةً اختياريّة، ومعلوماتِ تتبّعٍ اختيارية. | ||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/FalseClass|<code>FalseClass</code>]]=== | ||
===[[Ruby/ | القيمة <code>false</code> العامة (global) هي النسخة الوحيدة من الصنف <code>FalseClass</code> وتمثِّل قيمة الخطأ (false) في التعابير المنطقية (boolean expressions). يوفر هذا الصنف معاملات تسمح للقيمة <code>false</code> بالمساهمة بشكل صحيح في التعابير المنطقية. | ||
===[[Ruby/ | ===[[Ruby/Fiber|<code>Fiber</code>]]=== | ||
الألياف (Fibers) هي حقولٌ أساسيّةٌ (primitives) تُستخدم في تنفيذ تعدّد المهام التشاركي (cooperative concurrency) للمهام الخفيفة (light weight) أي التي تستهلك جزءًا صغيرًا من الذاكرة. | |||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/FiberError|<code>FiberError</code>]]=== | ||
يُرمى الاستثناء <code>FiberError</code> عند محاولة إجراء عمليّةٌ غير صحيحةٍ في الصنف <code>[[Ruby/Fiber|Fiber]]</code>، تحديدًا عند محاولة استدعاء/استئناف ليف ميِّت، أو محاولة التّوليد من الليف الجذر (root fiber)، أو استدعاء ليفٍ عبر خيوطٍ (threads). | |||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/File|<code>File</code>]]=== | ||
===[[Ruby/ | الصنف <code>File</code> هو اختصار لأي كائن ملفٍ قابل للوصول عبر البرنامج ومرتبط عن كثب بالصنف <code>[[Ruby/IO|IO]]</code>. | ||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/File::Constants|<code>File::Constants</code>]]=== | ||
===[[Ruby/ | توفر الوحدة <code>File::Constants</code> ثوابت متعلقة <nowiki/>[[Ruby/File|بالملفات]] في روبي. | ||
===[[Ruby/ | ===[[Ruby/File::Stat|<code>File::Stat</code>]]=== | ||
===[[Ruby/ | تتضمن كائنات الصنف <code>File::Stat</code> معلومات حول حالة الكائنات <code>[[Ruby/File|File]]</code>. | ||
===[[Ruby/ | |||
===[[Ruby/FileTest|<code>FileTest</code>]]=== | |||
===[[Ruby/ | تجري الوحدة <code>FileTest</code> عمليات تحقق على الملف بشكل مشابه لتلك الموجودة في الوحدة<code>[[Ruby/File::Stat|File::Stat]]</code>. هذه الوحدة موجودة على أنَّها وحدةٌ مستقلةٌ، وتوبعها تُعدُّ مرجعًا إلى الصنف <code>[[Ruby/File|File]]</code>. | ||
= | |||
===[[Ruby/ | ===[[Ruby/Float|<code>Float</code>]]=== | ||
===[[Ruby/ | تمثِّل كائنات الصنف <code>Float</code> أعدادًا حقيقيةً غير دقيقة (inexact real numbers) باستخدام التمثيل العشري ذي الدقة المضاعفة للبنية الأصلية. | ||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/FloatDomainError|<code>FloatDomainError</code>]]=== | ||
يرمى الاستثناء <code>FloatDomainError</code> عند محاولة تحويل قيم عشرية خاصة (مثل القيمة<code>Infinity</code> أو <code>NaN</code> على وجه الخصوص) إلى أصناف رقمية لا تدعمها. | |||
===[[Ruby/ | ===[[Ruby/FrozenError|<code>FrozenError</code>]]=== | ||
===[[Ruby/ | يرمى الاستثناء <code>FrozenError</code> عند محاولة تعديل كائن مجمد. | ||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/GC|<code>GC</code>]]=== | ||
===[[Ruby/ | توفر الوحدة <code>GC</code> واجهةً لتحديد ومسح آلية جمع البيانات المهملة (garbage collection) في روبي. | ||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/GC::Profiler|<code>GC::Profiler</code>]]=== | ||
===[[Ruby/ | يوفر مُنشئ ملفات تعريف جمع البيانات المهملة <code>GC::Profiler</code> الوصول إلى معلومات عن تشغيلات <code>[[Ruby/GC|GC]]</code> بما في ذلك الوقت والطول وحجم مساحة الكائن. | ||
== | |||
===[[Ruby/ | ===[[Ruby/Hash|<code>Hash</code>]]=== | ||
النوع <code>Hash</code> (أو الجدول Hash كما يطلق عليه أحيانًا) هو مجموعة تشبه القاموس ويتكون من مفاتيح فريدة وقيم مرتبطة بها. كما يسمى أيضًا المصفوفات الترابطية، فهو يشبه <nowiki/>[[Ruby/Array|المصفوفات]]، ولكن بينما تستخدم<nowiki/>[[Ruby/Array|المصفوفة]] فقط الأعداد الصحيحة كفهرس، يسمح النوع <code>Hash</code> باستخدام أيٍّ من أنواع الكائنات لاستعمالها كفهرس وربطها بقيمٍ. | |||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/IO|<code>IO</code>]]=== | ||
===[[Ruby/ | الصنف <code>IO</code> هو أساس كل عمليات الإدخال والإخراج في روبي. | ||
===[[Ruby/ | |||
===[[Ruby/ | ===[[Ruby/IO::EAGAINWaitReadable|<code>IO::EAGAINWaitReadable</code>]]=== | ||
===[[Ruby/IO::EAGAINWaitWritable|<code>IO::EAGAINWaitWritable</code>]]=== | |||
===[[Ruby/IO::EINPROGRESSWaitReadable|<code>IO::EINPROGRESSWaitReadable</code>]]=== | |||
===[[Ruby/IO::EINPROGRESSWaitWritable|<code>IO::EINPROGRESSWaitWritable</code>]]=== | |||
===[[Ruby/IO::EWOULDBLOCKWaitReadable|<code>IO::EWOULDBLOCKWaitReadable</code>]]=== | |||
===[[Ruby/IO::EWOULDBLOCKWaitWritable|<code>IO::EWOULDBLOCKWaitWritable</code>]]=== | |||
===[[Ruby/IO::WaitReadable|<code>IO::WaitReadable</code>]]=== | |||
===[[Ruby/IO::WaitWritable|<code>IO::WaitWritable</code>]]=== | |||
===[[Ruby/IOError|<code>IOError</code>]]=== | |||
يُطلق الاستثناء <code>IOError</code> عند فشل عملية [[Ruby/IO|إدخال/إخراج]] (IO operation) في روبي. | |||
===[[Ruby/IndexError|<code>IndexError</code>]]=== | |||
يُطلق الخطأ <code>IndexError</code> عندما يكون الفهرس (index) المُعطى غير صالح. | |||
===[[Ruby/Integer|<code>Integer</code>]]=== | |||
يمثل الصنف <code>Integer</code> الأعداد الصحيحة. | |||
===[[Ruby/Interrupt|<code>Interrupt</code>]]=== | |||
يُطلق الاستثناء <code>Interrupt</code> عند استقبال إشارة المقاطعة (interrupt signal)، عادةً لأن المستخدم ضغط على Ctrl-C (على معظم منصات POSIX). وعلى هذا النحو، فهو صنف فرعي من<code>[[Ruby/SignalException|SignalException]]</code>. | |||
===[[Ruby/Kernel|<code>Kernel</code>]]=== | |||
تُضمَّن الوحدة <code>Kernel</code> من طرف الصنف <code>[[Ruby/Object|Object]]</code>، لذلك فتوابعها متاحة في كل كائنات روبي. توابع نسخ الصنف <code>Kernel</code> مُوثّقة في صفحة الصنف <code>[[Ruby/Object|Object]]</code>، أما توابع الوحدة <code>Kernel</code> فهي مُوثقة في هذا القسم. | |||
===[[Ruby/KeyError|<code>KeyError</code>]]=== | |||
يُطلق الاستثناء <code>KeyError</code> عندما لا يكون المفتاح (key) المُحدد موجودًا، وهو صنف فرعي من <code>[[Ruby/IndexError|IndexError]]</code>. | |||
===[[Ruby/LoadError|<code>LoadError</code>]]=== | |||
يُطلق الاستثناء <code>LoadError</code> عند فشل تحميل الملف المطلوب (شيفرة روبي، مكتبة ملحقة، ...إلخ.). | |||
===[[Ruby/LocalJumpError|<code>LocalJumpError</code>]]=== | |||
يُطلق الاستثناء <code>LocalJumpError</code> عندما لا تتمكن روبي من الإعادة (yield) كما هو مطلوب. | |||
===[[Ruby/Marshal|<code>Marshal</code>]]=== | |||
تحوّل المكتبة <code>Marshal</code> مجموعات من كائنات روبي إلى مجرى من البايتات (byte stream)، مما يسمح بتخزينها خارج البرنامج النصي النشط حاليًا. يمكن بعد ذلك قراءة تلك البيانات وإعادة إنشاء الكائنات الأصلية أنشئت منها. | |||
===[[Ruby/MatchData|<code>MatchData</code>]]=== | |||
الصنف <code>MatchData</code> هو نوع المتغير الخاص <code>$~</code> ، كما أنه نوع الكائنات المُعادة من <code>[[Ruby/Regexp/match|Regexp.match]]</code> و <code>[[Ruby/Regexp/last match|Regexp.last_match]]</code>. فهو يغلف ويستوعب جميع نتائج التطابق مع تعبير نمطي. يمكن الوصول إلى النتائج من خلال المتغيرات الخاصة <code>$&</code> و <code>$'</code> و <code>$</code> و <code>$`</code> و <code>$1</code> و <code>$2</code> وهكذا دواليك. | |||
===[[Ruby/Math|<code>Math</code>]]=== | |||
تحوي الوحدة <code>Math</code> الدوال المثلثية والمتسامية (transcendental functions، وتدعى أيضًا الدوال اللاجبرية) الأساسية. راجع صفحة الصنف <code>[[Ruby/Float|Float]]</code> للحصول على قائمة الثوابت التي تحدد دقة الأعداد العشرية (floating point) في روبي. | |||
===[[Ruby/Math::DomainError|<code>Math::DomainError</code>]]=== | |||
يُطلَق الخطأ <code>DomainError</code> عند محاولة تقييم دالة رياضية خارج مجال تعريفها. | |||
===[[Ruby/Method|<code>Method</code>]]=== | |||
يتم إنشاء كائنات الصنف <code>Method</code> بواسطة التابع <code>Object.method</code>، وترتبط بكائن معين (وليس بالصنف وحسب). ويمكن استخدامها لاستدعاء التابع داخل الكائن، أو ككتلة (block) مرتبطة بمكرر (iterator). كما يمكن فك ارتباطها (unbound) من كائن محدد (سيؤدي ذلك إلى إنشاء الكائن <code>[[Ruby/UnboundMethod|UnboundMethod]]</code>) ثم ربطها بآخر. | |||
===[[Ruby/Module|<code>Module</code>]]=== | |||
الصنف <code>Module</code> هو مجموعة من التوابع والثوابت. التوابع الموجودة في الوحدات <code>Module</code> قد تكون إما توابع نسخة (instance methods)، أو توابع وحدة (module methods). توابع النسخة تظهر كتوابع في صنفٍ عند تضمين الوحدة، وذلك على خلاف توابع الوحدة. وعلى النقيض، يمكن استدعاء توابع الوحدة دون إنشاء كائن يُغلفها، بينما قد لا يمكن فعل ذلك مع توابع النسخة. انظر صفحة <code>[[Ruby/Module/module function|module_function]]</code>. | |||
===[[Ruby/Mutex|<code>Mutex</code>]]=== | |||
يمكن استخدام الصنف <code>Mutex</code> وكائناته كواجهة لتنسيق الوصول إلى البيانات المشتركة من عدة خيوط (threads) موجودة وتعمل في نفس الوقت. | |||
===[[Ruby/NameError|<code>NameError</code>]]=== | |||
يُطلق الاستثناء <code>NameError</code> عندما يكون الاسم المعطى غير صالح أو غير مُعرّف. | |||
===[[Ruby/NilClass|<code>NilClass</code>]]=== | |||
الصنف <code>NilClass</code> هو صنفٌ للكائن <code>nil</code> المُفرد. | |||
===[[Ruby/NoMemoryError|<code>NoMemoryError</code>]]=== | |||
يُطلق الاستثناء <code>NoMemoryError</code> عند الفشل في حجز جزءٍ من الذاكرة. | |||
===[[Ruby/NoMethodError|<code>NoMethodError</code>]]=== | |||
يُطلق الاستثناء <code>NoMethodError</code> عند استدعاء تابعٍ مع مستقبِل (receiver) غير مُعرَّف فيه مع فشل الاستجابة للتابع <code>[[Ruby/BasicObject/method missing|method_missing]]</code>. | |||
===[[Ruby/NotImplementedError|<code>NotImplementedError</code>]]=== | |||
يُطلق الاستثناء <code>NotImplementedError</code> عند عدم توفّر ميزة (feature) على نظام التشغيل الحالي. | |||
===[[Ruby/Numeric|<code>Numeric</code>]]=== | |||
الصنف <code>Numeric</code> هو الصنف الذي يجب أن ترثه كل الأصناف العددية عالية المستوى. | |||
===[[Ruby/Object|<code>Object</code>]]=== | |||
يعدُّ الصنف <code>Object</code> الجذر الافتراضي لكل كائنات روبي. يَرِث الصنف <code>Object</code> من الصنف <code>BasicObject</code> ما يسمح بإنشاء تسلسلات هرمية بديلة للكائن. تُتاح توابع الكائن لكل الأصناف ما لم يتم تجاهلها (overridden) صراحةً. | |||
===[[Ruby/ObjectSpace|<code>ObjectSpace</code>]]=== | |||
تحتوي الوحدة <code>ObjectSpace</code> على مجموعةٍ من البرامج الفرعيَّة (routines) التي تتفاعل مع وسائل جمع المهملات وتسمح لك باجتياز جميع الكائنات النشطة مع مُكرَّر (iterator). تقدِّم الوحدة <code>ObjectSpace</code> الدَّعم أيضًا لمُنهِيَات كائنٍ (object finalizers) وكتل <code>procs</code> التي تُستدعى عندما يكون كائنٌ محدَّدٌ على وشك أن يُدمَّر عبر مجمِّع المهملات. | |||
===[[Ruby/ObjectSpace::WeakMap|<code>ObjectSpace::WeakMap</code>]]=== | |||
يحتفظ كائن الصنف <code>ObjectSpace::WeakMap</code> بمراجع أيِّ كائن، لكن قد تخضع هذه الكائنات لعملية جمع المهملات (garbage collected). | |||
===[[Ruby/Proc|<code>Proc</code>]]=== | |||
كائنات الصنف <code>Proc</code> هي كتلٌ من الشيفرات البرمجية رُبطت إلى مجموعة من المتغيرات المحليَّة. حالما تُربط، يمكن استدعاء الشيفرة في سياقات مختلفة ويبقى الوصول متاحًا لتلك المتغيرات. | |||
===[[Ruby/Process|<code>Process</code>]]=== | |||
تُستعمَل الوحدة <code>Process</code> للتعامل والتحكم بجميع العمليات في روبي. | |||
===[[Ruby/Process::GID|<code>Process::GID</code>]]=== | |||
تحتوي الوحدة <code>Process::GID</code> على مجموعة من دوال الوحدة التي يمكنها، وبشكلٍ محمول (portably)، أن تجلب، وتضبط، وتُحوِّل مُعرِّفات المجموعة (group IDs) الحقيقيَّة والفعَّالة والمحفوظة للعملية الحاليَّة. | |||
===[[Ruby/Process::Status|<code>Process::Status</code>]]=== | |||
تُغلِّف الوحدة <code>Process::Status</code> معلومات عن حالة عملية النظام النشطة أو المنتهية. | |||
===[[Ruby/Process::Sys|<code>Process::Sys</code>]]=== | |||
تتضمَّن الوحدة <code>Process::Sys</code> دوالًا تتعامل مع معرِّف المستخدم (UID) ومعرِّف المجموعة (GID) عبر توفير ارتباطٍ مباشرٍ مع استدعاءات النظام التي تحمل نفس الاسم بدلًا من الإصدارات المحمولة للدوال التي تؤدي الوظيفة نفسها الموجودة في الوحدات <code>Process</code>، و <code>[[Ruby/Process/UID|Process::UID]]</code>، و <code>[[Ruby/Process/GID|Process::GID]]</code>. | |||
===[[Ruby/Process::UID|<code>Process::UID</code>]]=== | |||
تحتوي الوحدة <code>Process::UID</code> على مجموعة من دوال الوحدة التي يمكنها، وبشكلٍ محمول (portably)، أن تجلب، وتضبط، وتُحوِّل مُعرِّفات المستخدم (user IDs) الحقيقيَّة والفعَّالة والمحفوظة للعملية الحاليَّة. | |||
===[[Ruby/Process::Waiter|<code>Process::Waiter</code>]]=== | |||
===[[Ruby/Queue|<code>Queue</code>]]=== | |||
يُنفِّذ الصنف <code>Queue</code> طوابير الانتظار متعدِّدة المنتجين (multi-producer)، ومتعدِّدة المستهلكين (multi-consumer). إنَّه مفيدٌ بشكلٍ خاصٍّ في البرمجة المعتمدة على الخيوط (threaded programming) عندما يتحتَّم على المعلومات أن تُتبادل بأمان بين خيوطٍ (threads) متعدَّدة. | |||
===[[Ruby/Random|<code>Random</code>]]=== | |||
يزوِّد الصنف <code>Random</code> واجهةً لمولِّد أعدادٍ شبه عشوائيَّةٍ (pseudo-random number generator، أو يُدعى <code>PRNG</code>) في روبي. | |||
===[[Ruby/Random::Formatter|<code>Random::Formatter</code>]]=== | |||
===[[Ruby/Range|<code>Range</code>]]=== | |||
يمثل الصنف <code>Range</code> مجالًا (مجموعة) من القيم لها بداية ونهاية. | |||
===[[Ruby/RangeError|<code>RangeError</code>]]=== | |||
يُطلق الاستثناء <code>RangeError</code> عندما تكون قيمة عددية معطاة خارج النطاق. | |||
===[[Ruby/Rational|<code>Rational</code>]]=== | |||
يمثِّل الصنف <code>Rational</code> الأعداد الجذرية في روبي. | |||
===[[Ruby/Rational::compatible|<code>Rational::compatible</code>]]=== | |||
===[[Ruby/Regexp|<code>Regexp</code>]]=== | |||
تمثل كائنات الصنف <code>Regexp</code> التعابير النمطية التي تُستخدم لمطابقة نمط (pattern) معيّن في <nowiki/>[[Ruby/String|سلسلة نصية]]. | |||
===[[Ruby/RegexpError|<code>RegexpError</code>]]=== | |||
يُطلق الاستثناء <code>RangeError</code> عند إعطاء <nowiki/>[[Ruby/Regexp|تعبير نمطي]] غير صالح. | |||
===[[Ruby/RubyVM|<code>RubyVM</code>]]=== | |||
يمثل الصنف <code>RubyVM</code> الآلة الافتراضية (VM، اختصار إلى virtual machine). | |||
===[[Ruby/RubyVM::InstructionSequence|<code>RubyVM::InstructionSequence</code>]]=== | |||
===[[Ruby/RuntimeError|<code>RuntimeError</code>]]=== | |||
يُطلق الاستثناء <code>RuntimeError</code> عند محاولة تنفيذ عملية غير صالحة. | |||
===[[Ruby/ScriptError|<code>ScriptError</code>]]=== | |||
الصنف <code>ScriptError</code> هو الصنف الأب (superclass) لأصناف الأخطاء التي تُطلق عندما لا يمكن تنفيذ الشيفرة بسبب إحدى الأخطاء التالية: <code>[[Ruby/LoadError|LoadError]]</code> أو <code>[[Ruby/NotImplementedError|NotImplementedError]]</code> أو <code>[[Ruby/SyntaxError|SyntaxError]]</code>. | |||
===[[Ruby/SecurityError|<code>SecurityError</code>]]=== | |||
يُطلق الاستثناء <code>SecurityError</code> عند محاولة تنفيذ عملية قد تكون غير آمنة. | |||
===[[Ruby/Signal|<code>Signal</code>]]=== | |||
يمثِّل الصنف <code>Signal</code> الإشارات المرسلة إلى العمليات التي قيد التشغيل. | |||
===[[Ruby/SignalException|<code>SignalException</code>]]=== | |||
يًطللق الاستثناء <code>SignalException</code> عند تلقي <nowiki/>[[Ruby/Signal|إشارة]] ما. | |||
===[[Ruby/SizedQueue|<code>SizedQueue</code>]]=== | |||
يمثل هذا الصنف طوابيرًا (queues) ذات أحجام سعة محددة. | |||
===[[Ruby/StandardError|<code>StandardError</code>]]=== | |||
معظم أخطاء الأنواع تنحدر من الصنف <code>StandardError</code>؛ ستُعالج الكتلة <code>rescue</code> التي لا تحدد الصنف <code>[[Ruby/Exception|Exception]]</code> بشكل صريح كل الأخطاء <code>StandardError</code> (دون غيرها). | |||
===[[Ruby/StopIteration|<code>StopIteration</code>]]=== | |||
يُطلق الاستثناء <code>SecurityError</code> لوقف عملية التكرار (iteration)، خصوصًا عبر التابع<code>Enumerator.next</code>. | |||
===[[Ruby/String|<code>String</code>]]=== | |||
يمثِّل الصنف <code>String</code> السلاسل النصية في روبي التي تحتوي على حرف واحد أو أكثر أو قد تحتوي على حروف أبجدية، مثل أرقام ورموز، ويكون كل حرف (أو رمز أو رقم) ممثلًا ببايت. | |||
===[[Ruby/Struct|<code>Struct</code>]]=== | |||
يُعدُّ استخدام الصنف <code>Struct</code> طريقةً ملائمةً لتجميع مجموعة من الخاصيات (attributes) معًا، باستخدام مداخل (accessor methods) دون الحاجة إلى كتابة صنف جديد. | |||
===[[Ruby/Symbol|<code>Symbol</code>]]=== | |||
تمثل كائنات الصنف <code>Symbol</code> أسماء و<nowiki/>[[Ruby/String|سلاسل نصية]] داخل مترجم (interpreter) روبي. | |||
===[[Ruby/SyntaxError|<code>SyntaxError</code>]]=== | |||
يطلق الاستثناء <code>SyntaxError</code> عند اكتشاف خطأ في صياغة الشيفرة البرمجية لروبي. | |||
===[[Ruby/SystemCallError|<code>SystemCallError</code>]]=== | |||
يعتبر الصنف <code>SystemCallError</code> الصنف الأب لكل أصناف الأخطاء منخفضة المستوى المرتبطة بنظام التشغيل. | |||
===[[Ruby/SystemExit|<code>SystemExit</code>]]=== | |||
يُطلق الاستثناء <code>SystemExit</code> من قبل التعليمة <code>exit</code> لبدء عملية إنهاء الشيفرة البرمجية. | |||
===[[Ruby/SystemStackError|<code>SystemStackError</code>]]=== | |||
يُطلق الاستثناء <code>SystemExit</code> في حال امتلاء المُكدس (stack overflow). | |||
===[[Ruby/Thread|<code>Thread</code>]]=== | |||
المهام الفرعية (Threads، وتدعى "الخيوط" أيضًا) هي الطريقة التي تنفذ بها روبي البرمجة المتزامنة (concurrent programming). البرامج التي تتطلب تنفيذ عدة مهام فرعية يمكنها استخدام الصنف <code>Thread</code>. | |||
===[[Ruby/Thread::Backtrace::Location|<code>Thread::Backtrace::Location</code>]]=== | |||
===[[Ruby/ThreadError|<code>ThreadError</code>]]=== | |||
يُطلق الاستثناء <code>ThreadError</code> في حال محاولة تنفيذ عملية غير صالحة في <nowiki/>[[Ruby/Thread|مهمة فرعية]]. | |||
===[[Ruby/ThreadGroup|<code>ThreadGroup</code>]]=== | |||
يوفر الصنف <code>ThreadGroup</code> وسيلة لتتبع عددٍ من <nowiki/>[[Ruby/Thread|الخيوط]] (threads) باستمرار وكأنهم مجموعة واحدة. | |||
===[[Ruby/Time|<code>Time</code>]]=== | |||
الصنف <code>Time</code> هو تجريد لمفهومي التاريخ والوقت. | |||
===[[Ruby/TracePoint|<code>TracePoint</code>]]=== | |||
يوفر الصنف <code>TracePoint</code> وظائف <code>[[Ruby/Kernel/set trace func|Kernel.set_trace_func]]</code> على شكل واجهة برمجية كائنية (Object-Oriented API). | |||
===[[Ruby/TrueClass|<code>TrueClass</code>]]=== | |||
يوفر هذا الصنف عدة معاملات تسمح باستخدام القيمة <code>true</code> في التعبيرات المنطقية. | |||
===[[Ruby/TypeError|<code>TypeError</code>]]=== | |||
يُطلق الاستثناء <code>TypeError</code> عند استقبال كائن من غير النوع المتوقع. | |||
===[[Ruby/UnboundMethod|<code>UnboundMethod</code>]]=== | |||
يمثِّل الصنف <code>UnboundMethod</code> التوابع الحرة (unbound methods) وهي كائنات توابع غير مرتبطة بكائن معين. | |||
===[[Ruby/UncaughtThrowError|<code>UncaughtThrowError</code>]]=== | |||
يُطلق الاستثناء <code>UncaughtThrowError</code> عندما يتم استدعاء <code>throw</code> مع وسم (tag) لا يحتوي على الكتلة <code>catch</code> المقابلة. | |||
===[[Ruby/UnicodeNormalize|<code>UnicodeNormalize</code>]]=== | |||
تُعرَّف الوحدة <code>UnicodeNormalize</code> هنا حتى لا نضطر للبحث عنها. | |||
===[[Ruby/Warning|<code>Warning</code>]]=== | |||
يمثِّل الصنف <code>warn</code> كافة التحذيرات (warnings) الصادرة عن روبي. | |||
===[[Ruby/Warning::buffer|<code>Warning::buffer</code>]]=== | |||
===[[Ruby/ZeroDivisionError|<code>ZeroDivisionError</code>]]=== | |||
يرمى الاستثناء <code>ZeroDivisionError</code> عند محاولة تقسيم <nowiki/>[[Ruby/Integer|عدد صحيح]] على الصفر. | |||
===[[Ruby/fatal|<code>fatal</code>]]=== | |||
يُطلق الاستثناء <code>fatal</code> عندما تصادف روبي خطأ فادحًا (fatal error) بحيث يتوجب عليها إنهاء البرنامج فورًا، لأنه لا يمكن معالجة هذا الاستثناء. |
المراجعة الحالية بتاريخ 12:39، 17 ديسمبر 2018
تثبيت روبي
توجد طرائق عدَّة لتنزيل وتثبيت روبي على كل منصة وهي: إمَّا استعمال أنظمة مدير الحزم، أو باستعمال المثبِّتات التلقائية، أو باستعمال مدراء روبي. هنالك طريقة أخرى يمكنك بالتأكيد استعمالها لتثبيت روبي وتصريف شيفراتها وهي بنائها من الشيفرة المصدرية مباشرةً.
حول روبي
يوفر هذا القسم لمحة سريعة عن لغة روبي ونشأتها، وتطورها، ومزاياها التي انفردت بها عن اللغات الأخرى، والتنفيذات المختلفة التي تملكها.
البنية العامة
بنية اللغة
تعد روبي مزيجًا من اللغات البرمجية التالية: Perl، و Smalltalk، و Eiffel، و Ada، و Lisp وغيرها. انبثق عن هذا المزيج لغة برمجية جديدة حققت التوازن بين البرمجة الوظيفية (functional programming) والبرمجة الأمرية (imperative programming). بنية لغة روبي مشابهة إلى حد كبير بنية لغة Perl و Python.
الفاصل السطري مهم جدًا في روبي، إذ يُعدُّ نهايةً لأي تعبير برمجي عوضًا عن الفاصلة المنقوطة. مع ذلك، يمكن استعمال الفاصلة المنقوطة لأداء الغرض ذاته. بشكل مخالف لبايثون، المسافة البادئة (indentation) غير مهمة على الإطلاق.
puts "Hello World!"
لغة روبي هي لغة كائنية التوجه، إذ يعدُّ كل شيء فيها كائنًا؛ أي يمكن أن يُعطَى كل بت من المعلومات أو الشيفرة خاصيات وأحداث خاصة به. تدعى الخاصيات في اللغة كائنية التوجه "متغيرات النسخة" (instance variables) والأحداث "توابع" (methods). يظهر ذلك جليًّا في السطر البرمجي الآتي عبر تطبيق حدثٍ على عددٍ:
5.times { print "We *love* Ruby -- it's outrageous!" }
في أغلب لغات البرمجة، لا تعد الأعداد والأنواع الأساسية كائناتٍ. أمَّا في روبي، فإنَّها تمنح جميع الأنواع فيها توابع ومتغيرات نسخة، إذ تأثرت في ذلك من لغة البرمجة Smalltalk.
الكتلة block
في روبي هي من أكثر الأمور التي تعطي لهذه اللغة المرونة الكبيرة. يستطيع المبرمج أن يرفق كتلة برمجية مع أي تابع لتوجيهه إلى السلوك الذي يجب على هذا التابع أن يسلكه. أُخذَت هذه الميزة من اللغات الوظيفية تحديدًا لغة Lisp. إليك المثال البسيط التالي الذي يشرح كيفية استعمال الكتلة:
search_engines =
%w[Google Yahoo MSN].map do |engine|
"http://www." + engine.downcase + ".com"
end
في هذا المثال، يطبِّق التابع الكتلة - المحدَّدة بين الكلمتين do ... end
- على كل كلمة من الكلمات المعطاة.
رغم أنَّ روبي تستعمل علامات الترقيم والرموز بشكل محدود جدًا وتفضل استعمال الكلمات المفتاحة عوضًا عنها إلا أنَّ هنالك بعض العلامات الموجودة والمستعملة. يستعمل بعض هذه الرموز والعلامات لتحديد نطاق المتغيرات؛ تذكر أنَّك لا تحتاج في روبي إلى التصريح عن متغير بأسلوب محدَّد.
var
: يمكن أن يكون متغيِّرًا محليًّا.var@
: هو متغير نسخة.var$
: هو متغير عام.
الإسناد
لكي نسند شيئًا في لغة روبي، نستخدم رمز المساواة =
؛ ففي المثال التّالي، يُسنَد العدد 5 إلى المتغيّر v
المحلّي:
v = 5
فالإسناد يُنشئ متغيّرًا محلّيًا جديدًا إذا لم يكن قد عُرِّفَ من قبل.
استدعاء التوابع
عندما تستدعي تابعًا في روبي، فإنّك تمرّر رسالة لكائن معيّن لأجل تنفيذ مهمّة معيّنة، ويتمّ ذلك في روبي كالتّالي:
my_method()
لاحظ أنّ استخدام الأقواس المنحنية هنا اختياريّ:
my_method
المعتمد في هذا التّوثيق أن تُستخدّم الأقواس عند وجود المعامِلات لإزالة الالتباس، إلا في حالة وجود فرق بين وجود الأقواس وحذفها.
هذا القسم يغطّي فقط كيفيّة استدعاء التوابع.
تعابير التحكم
لدى لغة روبي العديد من الطرق للتحكم في مسار تنفيذ البرنامج، وكل البنى المذكورة هنا تعيد قيمةً. بنى التحكم الموجودة في روبي هي:
- بنية
If
الشرطية - تعبير
if
الثلاثي - بنية
unless
- البنيتان
If
وunless
المعدِّلتان - بنية
case
- حلقة
while
التكرارية - حلقة
until
التكرارية - حلقة
for
التكرارية - البنيتان
while
وuntil
المعدِّلتان - القلاب
الاستثناءات
يتمّ التعامل مع الاستثناءات بعد الكلمة rescue
في الكتلة begin/end
:
begin
# الشيفرة التي قد تسبب ظهور استثناء برمجي
rescue
# معالجة الاستثناء
end
إذا كنت ضمن تابع، فلست بحاجة لاستخدام begin
و end
إلا إذا كنت ترغب بحدّ النّطاق الخاص بالاستثناء الذي ترغب بمعالجته:
def my_method
# ...
rescue
# ...
end
نفس الأمر يطبّق في الأصناف (classes) والوحدات (modules).
التعابير البرمجية
تنشئ التعابير البرمجية في لغة روبي كائنات يمكنك استخدامها في برنامجك؛ هذه التعابير تتضمّن:
- القيم المنطقيّة والقيمة
nil
- الأعداد
- السلاسل النصية
- الرموز
- المصفوفات
- جداول Hash
- المجالات
- التعابير النمطية
- بنى Proc
التوابع
تتضمّن التوابع في لغة روبي الوظائف التي يقوم بها برنامجك. إليك هذا المثال لتعريف تابع بسيط:
def one_plus_one
1 + 1
end
تعريف التابع يتكوّن من الكلمة المحجوزة def
يتبعها اسم التابع، ثمّ جسم التابع، فالقيمة المعادة وفي النهاية الكلمة المحجوزة end
. فعند تنفيذ التابع في المثال السابق، ستُعاد القيمة 2. هذا القسم سيغطّي تعريف التّوابع.
الوحدات والأصناف
تخدم الوحدات (Modules) غايتين اثنتين في لغة روبي وهما: ميّزة نطاقات الأسماء (namespace)، والخلط الضمني (mix-in) التي سنوضّحها لاحقًا. أما الأصناف، فهي وحدات إلا أنّها لا يمكن استخدامها للخلط الضمنيّ (mix-in) ضمن وحدات أو أصناف أخرى. ويمكن استخدام الأصناف كالوحدات في حجز نطاق الأسماء، كما يمكن للصنف أن يرث التوابع والثوابت من الأصناف الأكبر.
التحسينات
إن ميّزة الأصناف المفتوحة في لغة روبي تسمح لك بإعادة تعريف أو إضافة وظائف إلى أصناف معرّفة مسبقًا. وهذا ما يسمى بمصطلح "ترقيع القرد" (monkey patch). المشكلة هنا أنَّ تعديلات من هذا النوع تكون مرئيّة على المستوى العام (global)، وبالتالي جميع مستخدمي الصنف المرقّع قادرون على رؤية هذه التغييرات، ممّا قد يسبّب تأثيرات جانبيّة غير محسوبة أو حتى عطب في البرامج.
تأتي التحسينات هنا لتقلّل أثر ترقيع القرد على مستخدمي الصنف الآخرين، إذ تقدّم طريقة لتوسيع الصنف محليًّا.
الأولويات
يوضح هذا القسم أولوية العمليات في روبي من الأعلى إلى الأدنى، إذ تُنفَّذ العمليات ذات الأولوية العليا قبل العمليات ذات الأولوية الأقل منها عند وجودها في نفس التعبير أو السطر البرمجي في الشيفرة.
صيغ متنوعة
يتطرَّق هذا القسم إلى شرح بقية الصيغ والبنى المستعملة في روبي والتي لم تُشمَل في الأقسام السابقة. ستجد فيه شرحًا حول الصيغة المستعملة في إنهاء التعبيرات البرمجية في روبي، وكيفية استعمال المسافات البادئة بالإضافة إلى شرح الكلمات المفتاحية alias
، و undef
، و ?defined
، و BEGIN
، و END
.
الأصناف والوحدات
ARGF
الصنف ARGF
هو مجرى (stream) صُمِّم ليُستخدَم في الملفات البرمجية (scritps) التي تُعالج الملفات المُمرَّرة إليها على شكل وسائط في سطر الأوامر (command-line arguments)، أو المُمرَّرة عبر مجرى الدخل القياسي (STDIN).
ArgumentError
يُطلق الاستثناء ArgumentError
عندما تكون الوسائط (arguments) غير صالحة، ولا يكون هناك صنف Exception
أكثر تحديدًا.
Array
المصفوفات هي مجموعات مُرتَّبة ومُفهرسة بالأعداد الصحيحة (integer-indexed) ومُكونة من أي نوع من الكائنات.
BasicObject
الصنف BasicObject
هو الصنف الأب لجميع الأصناف في روبي، وهو صنف فارغ.
Binding
تُغلِّف كائنات الصنف Binding
سياق التنفيذ (execution context) في مكان معين في الشيفرة البرمجية، وتحتفظ بذلك السياق لاستخدامه مستقبلًا. يُحتفَظ بالمتغيرات، والتوابع، وقيمةself
، وربما كتلة المكرر (iterator block) وكل ما يمكن الوصول إليه في هذا السياق. يمكن إنشاء كائنات الصنف Binding
باستخدام التابع Kernel.binding
، واستدعاؤها بوساطة التابع Kernel.set_trace_func
.
Class
تُعدُّ الأصناف كائناتٍ من الدرجة الأولى (first-class objects) في روبي، وتعدُّ جميعها نُسخٌ من الصنف Class
.
ClosedQueueError
Comparable
يُستخدم المخلوط (mixin) Comparable
من قبل الأصناف التي يمكن ترتيب كائناتها. يجب أن يحدِّد الصنفُ المعاملَ <=>
، الذي يوازن الكائن المستقبِل (receiver) مع كائن آخر ، ويعيد -1، أو 0، أو +1 إن كان المُستقبِل أصغر من الكائن الآخر، أو يساويه، أو أكبر منه على التوالي.
Complex
يمكن تمثيل الأعداد العقدية (تُسمّى أيضًا أعدادًا مركبةً [complex number]) كزوج مكون من عدد حقيقي ووحدة تخلية (العدد i
) وفق الشكل a+bi
، إذ a
هو الجزء الحقيقي، و b
هو الجزء التخيلي و i
هو الوحدة الخيالية.
Complex::compatible
ConditionVariable
توسع كائنات الصنف ConditionVariable
عمل الصنف Mutex
. فمن الممكن باستخدام المتغيرات الشرطية إيقاف مهمة حرجة (critical section) في أثناء تنفيذها إلى حين إتاحة مورد ما.
Continuation
تُولّد الكائنات Continuation
بواسطة التابع Kernel.callcc
بعد استيراد continuation
عبر require
. تحمل هذه الكائنات عنوان العودة (return address) وسياق التنفيذ (execution context)، مما يتيح العودة إلى نهاية الكتلة callcc
من أي مكان في البرنامج.
Data
الصنف Data
هو صنف مهمل. كان يعدُّ الصنف الأساس لملحقات C التي تستعمل Data_Make_Struct
أو Data_Wrap_Struct
.
Dir
كائنات الصنف Dir
هي مجاري مجلدات (directory streams) تمثِّل الجلدات في نظام الملفات الأساسي لنظام التشغيل. فهي توفر طرائق متعددة لعرض المجلدات ومحتوياتها. انظر أيضًا صفحة الصنف File
لمزيد من المعلومات.
ENV
يشبه الصنف ENV
الجداول Hash
كثيرًا ويُستعمل للوصول إلى متغيرات البيئة.
EOFError
يٌطلَق الخطأ EOFError
من طرف بعض عمليات الصنف IO
عندما تصل إلى نهاية الملف.
Encoding
يمثل الصنف Encoding
ترميز المحارف الذي يمكننا استخدامه في لغة روبي.
Encoding::CompatibilityError
يُرمى الاستثناء CompatibilityError
من قبل توابع الصّنفين String
و Encoding
عندما لا يتوافق ترميز المصدر مع ترميز الهدف.
Encoding::Converter
يُستعمَل الصنف Encoding::Converter
في عمليات تحويل الترميز في السلاسل النصية.
Encoding::ConverterNotFoundError
يُرمى الاستثناء ConverterNotFoundError
من قبل توابع تبديل التّرميز (transcoding) عندما لا يتوافق ترميزٌ باسمٍ معيّنٍ مع محوّلٍ (converter) محدَّد.
Encoding::InvalidByteSequenceError
يُرمَى الاستنثناء InvalidByteSequenceError
من قبل توابع الصّنفين String
و Encoding
عندما تحوي السّلسلة النّصية التي يجري تحويل ترميزها بايتًا غير صالح إما للتّرميز المصدر أو التّرميز الهدف المراد التحويل إليه.
Encoding::UndefinedConversionError
يُرمَى الاستثناء UndefinedConversionError
من قبل توابع الصّنفين String
و Encoding
عندما تفشل عملية تبديل التّرميز (transcoding).
EncodingError
يُمثِّل الصنف EncodingError
الصِّنفَ القاعديَّ (base class) لجميعِ أخطاء التّرميز (الصنف Encoding
).
Enumerable
يوفر المخلوط Enumerable
مجموعة من الأصناف مع توابع تنقل (traversal) وبحث عديدة قادرة على ترتيب عناصر مجموعة مع بعضها بعضًا.
Enumerator
الصنف Enumerator
هو صنفٌ يسمح بتنفيذ عملية التكرار الداخلي والخارجي.
Enumerator::Generator
Enumerator::Lazy
الصنف Enumerator::Lazy
هو صنف يسمح بعملية التكرار - مثل الصنف Enumerator
- ولكن بالنمط الكسول (lazy fashion).
Enumerator::Yielder
Errno
تُنشَأ الوحدة Errno
ديناميكيًّا لتنظيم تفاصيل الأخطاء تُبلِّغ أنظمة عنها وإرسالها إلى أصناف روبي، مع توليد صنف فرعي من الصنف SystemCallError
خاص بكل رقم خطأٍ.
Exception
تُستخدَم الكائنات السليلة من الصنف Exception
للتواصل بين التّابع Kernel.raise
وتصريحات rescue
في الكتل (blocks) من الشكل begin...end
. تَحمل كائنات الصنفException
معلوماتٍ عن الاستثناء المَرمي مثل نوعه (اسم صنف الاستثناء)، وسلسلةً نصيّةً وصفيّةً اختياريّة، ومعلوماتِ تتبّعٍ اختيارية.
FalseClass
القيمة false
العامة (global) هي النسخة الوحيدة من الصنف FalseClass
وتمثِّل قيمة الخطأ (false) في التعابير المنطقية (boolean expressions). يوفر هذا الصنف معاملات تسمح للقيمة false
بالمساهمة بشكل صحيح في التعابير المنطقية.
Fiber
الألياف (Fibers) هي حقولٌ أساسيّةٌ (primitives) تُستخدم في تنفيذ تعدّد المهام التشاركي (cooperative concurrency) للمهام الخفيفة (light weight) أي التي تستهلك جزءًا صغيرًا من الذاكرة.
FiberError
يُرمى الاستثناء FiberError
عند محاولة إجراء عمليّةٌ غير صحيحةٍ في الصنف Fiber
، تحديدًا عند محاولة استدعاء/استئناف ليف ميِّت، أو محاولة التّوليد من الليف الجذر (root fiber)، أو استدعاء ليفٍ عبر خيوطٍ (threads).
File
الصنف File
هو اختصار لأي كائن ملفٍ قابل للوصول عبر البرنامج ومرتبط عن كثب بالصنف IO
.
File::Constants
توفر الوحدة File::Constants
ثوابت متعلقة بالملفات في روبي.
File::Stat
تتضمن كائنات الصنف File::Stat
معلومات حول حالة الكائنات File
.
FileTest
تجري الوحدة FileTest
عمليات تحقق على الملف بشكل مشابه لتلك الموجودة في الوحدةFile::Stat
. هذه الوحدة موجودة على أنَّها وحدةٌ مستقلةٌ، وتوبعها تُعدُّ مرجعًا إلى الصنف File
.
Float
تمثِّل كائنات الصنف Float
أعدادًا حقيقيةً غير دقيقة (inexact real numbers) باستخدام التمثيل العشري ذي الدقة المضاعفة للبنية الأصلية.
FloatDomainError
يرمى الاستثناء FloatDomainError
عند محاولة تحويل قيم عشرية خاصة (مثل القيمةInfinity
أو NaN
على وجه الخصوص) إلى أصناف رقمية لا تدعمها.
FrozenError
يرمى الاستثناء FrozenError
عند محاولة تعديل كائن مجمد.
GC
توفر الوحدة GC
واجهةً لتحديد ومسح آلية جمع البيانات المهملة (garbage collection) في روبي.
GC::Profiler
يوفر مُنشئ ملفات تعريف جمع البيانات المهملة GC::Profiler
الوصول إلى معلومات عن تشغيلات GC
بما في ذلك الوقت والطول وحجم مساحة الكائن.
Hash
النوع Hash
(أو الجدول Hash كما يطلق عليه أحيانًا) هو مجموعة تشبه القاموس ويتكون من مفاتيح فريدة وقيم مرتبطة بها. كما يسمى أيضًا المصفوفات الترابطية، فهو يشبه المصفوفات، ولكن بينما تستخدمالمصفوفة فقط الأعداد الصحيحة كفهرس، يسمح النوع Hash
باستخدام أيٍّ من أنواع الكائنات لاستعمالها كفهرس وربطها بقيمٍ.
IO
الصنف IO
هو أساس كل عمليات الإدخال والإخراج في روبي.
IO::EAGAINWaitReadable
IO::EAGAINWaitWritable
IO::EINPROGRESSWaitReadable
IO::EINPROGRESSWaitWritable
IO::EWOULDBLOCKWaitReadable
IO::EWOULDBLOCKWaitWritable
IO::WaitReadable
IO::WaitWritable
IOError
يُطلق الاستثناء IOError
عند فشل عملية إدخال/إخراج (IO operation) في روبي.
IndexError
يُطلق الخطأ IndexError
عندما يكون الفهرس (index) المُعطى غير صالح.
Integer
يمثل الصنف Integer
الأعداد الصحيحة.
Interrupt
يُطلق الاستثناء Interrupt
عند استقبال إشارة المقاطعة (interrupt signal)، عادةً لأن المستخدم ضغط على Ctrl-C (على معظم منصات POSIX). وعلى هذا النحو، فهو صنف فرعي منSignalException
.
Kernel
تُضمَّن الوحدة Kernel
من طرف الصنف Object
، لذلك فتوابعها متاحة في كل كائنات روبي. توابع نسخ الصنف Kernel
مُوثّقة في صفحة الصنف Object
، أما توابع الوحدة Kernel
فهي مُوثقة في هذا القسم.
KeyError
يُطلق الاستثناء KeyError
عندما لا يكون المفتاح (key) المُحدد موجودًا، وهو صنف فرعي من IndexError
.
LoadError
يُطلق الاستثناء LoadError
عند فشل تحميل الملف المطلوب (شيفرة روبي، مكتبة ملحقة، ...إلخ.).
LocalJumpError
يُطلق الاستثناء LocalJumpError
عندما لا تتمكن روبي من الإعادة (yield) كما هو مطلوب.
Marshal
تحوّل المكتبة Marshal
مجموعات من كائنات روبي إلى مجرى من البايتات (byte stream)، مما يسمح بتخزينها خارج البرنامج النصي النشط حاليًا. يمكن بعد ذلك قراءة تلك البيانات وإعادة إنشاء الكائنات الأصلية أنشئت منها.
MatchData
الصنف MatchData
هو نوع المتغير الخاص $~
، كما أنه نوع الكائنات المُعادة من Regexp.match
و Regexp.last_match
. فهو يغلف ويستوعب جميع نتائج التطابق مع تعبير نمطي. يمكن الوصول إلى النتائج من خلال المتغيرات الخاصة $&
و $'
و $
و $`
و $1
و $2
وهكذا دواليك.
Math
تحوي الوحدة Math
الدوال المثلثية والمتسامية (transcendental functions، وتدعى أيضًا الدوال اللاجبرية) الأساسية. راجع صفحة الصنف Float
للحصول على قائمة الثوابت التي تحدد دقة الأعداد العشرية (floating point) في روبي.
Math::DomainError
يُطلَق الخطأ DomainError
عند محاولة تقييم دالة رياضية خارج مجال تعريفها.
Method
يتم إنشاء كائنات الصنف Method
بواسطة التابع Object.method
، وترتبط بكائن معين (وليس بالصنف وحسب). ويمكن استخدامها لاستدعاء التابع داخل الكائن، أو ككتلة (block) مرتبطة بمكرر (iterator). كما يمكن فك ارتباطها (unbound) من كائن محدد (سيؤدي ذلك إلى إنشاء الكائن UnboundMethod
) ثم ربطها بآخر.
Module
الصنف Module
هو مجموعة من التوابع والثوابت. التوابع الموجودة في الوحدات Module
قد تكون إما توابع نسخة (instance methods)، أو توابع وحدة (module methods). توابع النسخة تظهر كتوابع في صنفٍ عند تضمين الوحدة، وذلك على خلاف توابع الوحدة. وعلى النقيض، يمكن استدعاء توابع الوحدة دون إنشاء كائن يُغلفها، بينما قد لا يمكن فعل ذلك مع توابع النسخة. انظر صفحة module_function
.
Mutex
يمكن استخدام الصنف Mutex
وكائناته كواجهة لتنسيق الوصول إلى البيانات المشتركة من عدة خيوط (threads) موجودة وتعمل في نفس الوقت.
NameError
يُطلق الاستثناء NameError
عندما يكون الاسم المعطى غير صالح أو غير مُعرّف.
NilClass
الصنف NilClass
هو صنفٌ للكائن nil
المُفرد.
NoMemoryError
يُطلق الاستثناء NoMemoryError
عند الفشل في حجز جزءٍ من الذاكرة.
NoMethodError
يُطلق الاستثناء NoMethodError
عند استدعاء تابعٍ مع مستقبِل (receiver) غير مُعرَّف فيه مع فشل الاستجابة للتابع method_missing
.
NotImplementedError
يُطلق الاستثناء NotImplementedError
عند عدم توفّر ميزة (feature) على نظام التشغيل الحالي.
Numeric
الصنف Numeric
هو الصنف الذي يجب أن ترثه كل الأصناف العددية عالية المستوى.
Object
يعدُّ الصنف Object
الجذر الافتراضي لكل كائنات روبي. يَرِث الصنف Object
من الصنف BasicObject
ما يسمح بإنشاء تسلسلات هرمية بديلة للكائن. تُتاح توابع الكائن لكل الأصناف ما لم يتم تجاهلها (overridden) صراحةً.
ObjectSpace
تحتوي الوحدة ObjectSpace
على مجموعةٍ من البرامج الفرعيَّة (routines) التي تتفاعل مع وسائل جمع المهملات وتسمح لك باجتياز جميع الكائنات النشطة مع مُكرَّر (iterator). تقدِّم الوحدة ObjectSpace
الدَّعم أيضًا لمُنهِيَات كائنٍ (object finalizers) وكتل procs
التي تُستدعى عندما يكون كائنٌ محدَّدٌ على وشك أن يُدمَّر عبر مجمِّع المهملات.
ObjectSpace::WeakMap
يحتفظ كائن الصنف ObjectSpace::WeakMap
بمراجع أيِّ كائن، لكن قد تخضع هذه الكائنات لعملية جمع المهملات (garbage collected).
Proc
كائنات الصنف Proc
هي كتلٌ من الشيفرات البرمجية رُبطت إلى مجموعة من المتغيرات المحليَّة. حالما تُربط، يمكن استدعاء الشيفرة في سياقات مختلفة ويبقى الوصول متاحًا لتلك المتغيرات.
Process
تُستعمَل الوحدة Process
للتعامل والتحكم بجميع العمليات في روبي.
Process::GID
تحتوي الوحدة Process::GID
على مجموعة من دوال الوحدة التي يمكنها، وبشكلٍ محمول (portably)، أن تجلب، وتضبط، وتُحوِّل مُعرِّفات المجموعة (group IDs) الحقيقيَّة والفعَّالة والمحفوظة للعملية الحاليَّة.
Process::Status
تُغلِّف الوحدة Process::Status
معلومات عن حالة عملية النظام النشطة أو المنتهية.
Process::Sys
تتضمَّن الوحدة Process::Sys
دوالًا تتعامل مع معرِّف المستخدم (UID) ومعرِّف المجموعة (GID) عبر توفير ارتباطٍ مباشرٍ مع استدعاءات النظام التي تحمل نفس الاسم بدلًا من الإصدارات المحمولة للدوال التي تؤدي الوظيفة نفسها الموجودة في الوحدات Process
، و Process::UID
، و Process::GID
.
Process::UID
تحتوي الوحدة Process::UID
على مجموعة من دوال الوحدة التي يمكنها، وبشكلٍ محمول (portably)، أن تجلب، وتضبط، وتُحوِّل مُعرِّفات المستخدم (user IDs) الحقيقيَّة والفعَّالة والمحفوظة للعملية الحاليَّة.
Process::Waiter
Queue
يُنفِّذ الصنف Queue
طوابير الانتظار متعدِّدة المنتجين (multi-producer)، ومتعدِّدة المستهلكين (multi-consumer). إنَّه مفيدٌ بشكلٍ خاصٍّ في البرمجة المعتمدة على الخيوط (threaded programming) عندما يتحتَّم على المعلومات أن تُتبادل بأمان بين خيوطٍ (threads) متعدَّدة.
Random
يزوِّد الصنف Random
واجهةً لمولِّد أعدادٍ شبه عشوائيَّةٍ (pseudo-random number generator، أو يُدعى PRNG
) في روبي.
Random::Formatter
Range
يمثل الصنف Range
مجالًا (مجموعة) من القيم لها بداية ونهاية.
RangeError
يُطلق الاستثناء RangeError
عندما تكون قيمة عددية معطاة خارج النطاق.
Rational
يمثِّل الصنف Rational
الأعداد الجذرية في روبي.
Rational::compatible
Regexp
تمثل كائنات الصنف Regexp
التعابير النمطية التي تُستخدم لمطابقة نمط (pattern) معيّن في سلسلة نصية.
RegexpError
يُطلق الاستثناء RangeError
عند إعطاء تعبير نمطي غير صالح.
RubyVM
يمثل الصنف RubyVM
الآلة الافتراضية (VM، اختصار إلى virtual machine).
RubyVM::InstructionSequence
RuntimeError
يُطلق الاستثناء RuntimeError
عند محاولة تنفيذ عملية غير صالحة.
ScriptError
الصنف ScriptError
هو الصنف الأب (superclass) لأصناف الأخطاء التي تُطلق عندما لا يمكن تنفيذ الشيفرة بسبب إحدى الأخطاء التالية: LoadError
أو NotImplementedError
أو SyntaxError
.
SecurityError
يُطلق الاستثناء SecurityError
عند محاولة تنفيذ عملية قد تكون غير آمنة.
Signal
يمثِّل الصنف Signal
الإشارات المرسلة إلى العمليات التي قيد التشغيل.
SignalException
يًطللق الاستثناء SignalException
عند تلقي إشارة ما.
SizedQueue
يمثل هذا الصنف طوابيرًا (queues) ذات أحجام سعة محددة.
StandardError
معظم أخطاء الأنواع تنحدر من الصنف StandardError
؛ ستُعالج الكتلة rescue
التي لا تحدد الصنف Exception
بشكل صريح كل الأخطاء StandardError
(دون غيرها).
StopIteration
يُطلق الاستثناء SecurityError
لوقف عملية التكرار (iteration)، خصوصًا عبر التابعEnumerator.next
.
String
يمثِّل الصنف String
السلاسل النصية في روبي التي تحتوي على حرف واحد أو أكثر أو قد تحتوي على حروف أبجدية، مثل أرقام ورموز، ويكون كل حرف (أو رمز أو رقم) ممثلًا ببايت.
Struct
يُعدُّ استخدام الصنف Struct
طريقةً ملائمةً لتجميع مجموعة من الخاصيات (attributes) معًا، باستخدام مداخل (accessor methods) دون الحاجة إلى كتابة صنف جديد.
Symbol
تمثل كائنات الصنف Symbol
أسماء وسلاسل نصية داخل مترجم (interpreter) روبي.
SyntaxError
يطلق الاستثناء SyntaxError
عند اكتشاف خطأ في صياغة الشيفرة البرمجية لروبي.
SystemCallError
يعتبر الصنف SystemCallError
الصنف الأب لكل أصناف الأخطاء منخفضة المستوى المرتبطة بنظام التشغيل.
SystemExit
يُطلق الاستثناء SystemExit
من قبل التعليمة exit
لبدء عملية إنهاء الشيفرة البرمجية.
SystemStackError
يُطلق الاستثناء SystemExit
في حال امتلاء المُكدس (stack overflow).
Thread
المهام الفرعية (Threads، وتدعى "الخيوط" أيضًا) هي الطريقة التي تنفذ بها روبي البرمجة المتزامنة (concurrent programming). البرامج التي تتطلب تنفيذ عدة مهام فرعية يمكنها استخدام الصنف Thread
.
Thread::Backtrace::Location
ThreadError
يُطلق الاستثناء ThreadError
في حال محاولة تنفيذ عملية غير صالحة في مهمة فرعية.
ThreadGroup
يوفر الصنف ThreadGroup
وسيلة لتتبع عددٍ من الخيوط (threads) باستمرار وكأنهم مجموعة واحدة.
Time
الصنف Time
هو تجريد لمفهومي التاريخ والوقت.
TracePoint
يوفر الصنف TracePoint
وظائف Kernel.set_trace_func
على شكل واجهة برمجية كائنية (Object-Oriented API).
TrueClass
يوفر هذا الصنف عدة معاملات تسمح باستخدام القيمة true
في التعبيرات المنطقية.
TypeError
يُطلق الاستثناء TypeError
عند استقبال كائن من غير النوع المتوقع.
UnboundMethod
يمثِّل الصنف UnboundMethod
التوابع الحرة (unbound methods) وهي كائنات توابع غير مرتبطة بكائن معين.
UncaughtThrowError
يُطلق الاستثناء UncaughtThrowError
عندما يتم استدعاء throw
مع وسم (tag) لا يحتوي على الكتلة catch
المقابلة.
UnicodeNormalize
تُعرَّف الوحدة UnicodeNormalize
هنا حتى لا نضطر للبحث عنها.
Warning
يمثِّل الصنف warn
كافة التحذيرات (warnings) الصادرة عن روبي.
Warning::buffer
ZeroDivisionError
يرمى الاستثناء ZeroDivisionError
عند محاولة تقسيم عدد صحيح على الصفر.
fatal
يُطلق الاستثناء fatal
عندما تصادف روبي خطأ فادحًا (fatal error) بحيث يتوجب عليها إنهاء البرنامج فورًا، لأنه لا يمكن معالجة هذا الاستثناء.