صيغ متنوعة في روبي
سنتطرق في هذه الصفحة إلى شرح بقية الصيغ والبنى المستعملة في روبي والتي لم تُشمَل في الأقسام السابقة. ستجد هنا شرحًا حول الصيغة المستعملة في إنهاء التعبيرات البرمجية في روبي، وكيفية استعمال المسافات البادئة بالإضافة إلى شرح الكلمات المفتاحية 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'