صيغ متنوعة في روبي

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

سنتطرق في هذه الصفحة إلى شرح بقية الصيغ والبنى المستعملة في روبي والتي لم تُشمَل في الأقسام السابقة. ستجد هنا شرحًا حول الصيغة المستعملة في إنهاء التعبيرات البرمجية في روبي، وكيفية استعمال المسافات البادئة بالإضافة إلى شرح الكلمات المفتاحية alias، و undef، و ?defined، و BEGIN، و END.

إنهاء تعبير برمجي

يعدّ السطر الجديد في لغة روبي إنهاءًا للتعبير البرمجيّ السابق. وإذا انتهى السطر بعملية أو قوس مفتوح أو فاصلة أو ما شابه، فسيستمرّ التعبير البرمجيّ إلى السطر التالي. كما بإمكانك إنهاء التعبير البرمجيّ بالفاصلة المنقوطة ; وهي تستخدم عادة مع ruby -e.

المسافات البادئة

لا تتطلب لغة روبي أيّ نوع من المسافات البادئة، والأفضل عمومًا استخدام فراغين اثنين لإضافة المسافة البادئة. وإذا كنت تشِّغل اللغة بنمط تفعيل التنبيهات وكان لديك مسافات بادئة غير متطابقة، فسيصلك تنبيه بذلك.

الكلمة المفتاحية alias

تستخدم الكلمة alias لإعطاء أسماء متعدّدة (أسماء بديلة) لنفس التوابع، وبإمكانك كتابة اسم للتابع أو استخدام الرموز:

alias new_name old_name
alias :new_name :old_name

وعاد ما يستخدم  Module.alias_method مع التوابع بدلًا من استخدام alias. كما بإمكانك استخدام alias مع المتغيّرات العامّة:

$old = 0
alias $new $old
p $new # تطبع 0

ويمكنك استخدامها كذلك ضمن أيّ نطاق.

الكلمة المفتاحية undef

تمنع الكلمة undef الصنف الحاليّ من الاستجابة لاستدعاءات تابع معيّن.

undef my_method

كما بإمكانك استخدام الرموز بدلًا من اسم التابع:

undef :my_method

وتستطيع تطبيقها على عدد من التوابع معًا:

undef method1, method2

وبإمكانك استخدامها ضمن أيّ نطاق. انظر صفحة التوثيق Module.undef_method لمزيد من التفاصيل.

الكلمة المفتاحية ?defined

عند استعمال الكلمة الفتاحية ?defined، فإنها تعيد وصفًا لنوع الوسيط المُمرّر إليها: 

p defined?(UNDEFINED_CONSTANT) #        nil تطبع
p defined?(RUBY_VERSION)       # "constant" تطبع
p defined?(1 + 1)              #   "method" تطبع

لست مضطرًا لاستخدام الأقواس مع ?defined إلا أنّه من الأفضل استخدامها بسبب انخفاض أولويّتها. فعلى سبيل المثال إذا أردت أن تتحقّق من تعريف متغيّر ما وأنّ قيمته تساوي الصفر، فاكتب التالي:

defined? @instance_variable && @instance_variable.zero?

سيكون الناتج "expression" وليس هذا الذي تريده في حال لم يكن المتغيّر معرّفًا.

@instance_variable = 1
defined?(@instance_variable) && @instance_variable.zero?

من الأفضل إضافة الأقواس عند التحقّق من كون المتغيّر معرّفًا أم لا، وستكون النتيجة nil في حال لم يكن معرّفًا و false في حال كونه لا يساوي الصفر.

وهناك توابع مكافئة مثل ?instance_variable_defined لأجل متغيّرات النسخة أو ?const_defned لأجل الثوابت، إذ تعدّ هذه التوابع أقلّ عرضةً للخطأ من استخدام ?defined.

BEGIN و END

تستخدم الكلمة BEGIN لتعريف كتلة برمجيّة تُنفّذ قبل أي جزء آخر من الشيفرة البرمجيّة في الملفّ الحالي. وعادة ما تستخدم في العمليات البرمجية ذات السطر الواحد باستخدام ruby -e. وبالمثل، تستخدم الكلمة END لتعريف كتلة برمجيّة تنفّذ بعد تنفيذ كامل الشيفرة البرمجيّة.

يجب أن تُكتب BEGIN في المستوى الأعلى، وستسبب END تنبيهًا إذا استخدمت ضمن تابع. وإليك المثال التالي:

BEGIN {
 count = 0
}

يجب أن تستخدم الأقواس { و } ، ولا تستخدم do و end. المثال التالي هو سطر برمجيّ يجمع أرقامًا مدخلةً من مجرى الدخل القياسيّ أو من أيّ ملف في قائمة الوسائط:

ruby -ne 'BEGIN { count = 0 }; END { puts count }; count += gets.to_i'

مصادر