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

من موسوعة حسوب
< Ruby
مراجعة 16:40، 17 نوفمبر 2018 بواسطة نور-الدين-الهبل (نقاش | مساهمات) (أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:صيغ متنوعة في لغة روبي}}</noinclude> = صيغ متنوعة في لغة روبي = == إنهاء تعبير برمجيّ == ي...')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

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

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

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