الفرق بين المراجعتين لصفحة: «Ruby/miscellaneous»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:صيغ متنوعة في لغة روبي}}</noinclude> = صيغ متنوعة في لغة روبي = == إنهاء تعبير برمجيّ == ي...' |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
(مراجعتان متوسطتان بواسطة مستخدم واحد آخر غير معروضتين) | |||
سطر 1: | سطر 1: | ||
< | سنتطرق في هذه الصفحة إلى شرح بقية الصيغ والبنى المستعملة في روبي والتي لم تُشمَل في الأقسام السابقة. ستجد هنا شرحًا حول الصيغة المستعملة في إنهاء التعبيرات البرمجية في روبي، وكيفية استعمال المسافات البادئة بالإضافة إلى شرح الكلمات المفتاحية <code>alias</code>، و <code>undef</code>، و <code>?defined</code>، و <code>BEGIN</code>، و <code>END</code>. | ||
== إنهاء تعبير | ==إنهاء تعبير برمجي== | ||
يعدّ السطر الجديد في لغة روبي إنهاءًا للتعبير البرمجيّ السابق. وإذا انتهى السطر بعملية أو قوس مفتوح أو فاصلة أو ما شابه، فسيستمرّ التعبير البرمجيّ إلى السطر التالي. | يعدّ السطر الجديد في لغة روبي إنهاءًا للتعبير البرمجيّ السابق. وإذا انتهى السطر بعملية أو قوس مفتوح أو فاصلة أو ما شابه، فسيستمرّ التعبير البرمجيّ إلى السطر التالي. كما بإمكانك إنهاء التعبير البرمجيّ بالفاصلة المنقوطة <code>;</code> وهي تستخدم عادة مع <code>ruby -e</code>. | ||
كما بإمكانك إنهاء التعبير البرمجيّ بالفاصلة المنقوطة ; وهي تستخدم عادة مع ruby -e. | ==المسافات البادئة== | ||
== المسافات البادئة == | لا تتطلب لغة روبي أيّ نوع من المسافات البادئة، والأفضل عمومًا استخدام فراغين اثنين لإضافة المسافة البادئة. وإذا كنت تشِّغل اللغة بنمط تفعيل التنبيهات وكان لديك مسافات بادئة غير متطابقة، فسيصلك تنبيه بذلك. | ||
لا تتطلب لغة روبي أيّ نوع من المسافات البادئة، والأفضل عمومًا استخدام فراغين اثنين لإضافة المسافة البادئة. | ==الكلمة المفتاحية <code>alias</code>== | ||
وإذا كنت | تستخدم الكلمة <code>alias</code> لإعطاء أسماء متعدّدة (أسماء بديلة) لنفس التوابع، وبإمكانك كتابة اسم للتابع أو استخدام [[Ruby/Symbol|الرموز]]:<syntaxhighlight lang="ruby"> | ||
== | |||
تستخدم | |||
<syntaxhighlight lang="ruby"> | |||
alias new_name old_name | alias new_name old_name | ||
alias :new_name :old_name | alias :new_name :old_name | ||
</syntaxhighlight> | </syntaxhighlight>وعاد ما يستخدم <code>[[Ruby/Module/alias method|Module.alias_method]]</code> مع التوابع بدلًا من استخدام <code>alias</code>. كما بإمكانك استخدام <code>alias</code> مع المتغيّرات العامّة:<syntaxhighlight lang="ruby"> | ||
وعاد ما يستخدم | |||
كما بإمكانك استخدام alias مع المتغيّرات العامّة: | |||
<syntaxhighlight lang="ruby"> | |||
$old = 0 | $old = 0 | ||
alias $new $old | alias $new $old | ||
p $new # تطبع 0 | p $new # تطبع 0 | ||
</syntaxhighlight> | </syntaxhighlight>ويمكنك استخدامها كذلك ضمن أيّ نطاق. | ||
ويمكنك استخدامها كذلك ضمن أيّ نطاق. | |||
== الكلمة المفتاحية <code>undef</code> == | |||
تمنع undef الصنف الحاليّ من الاستجابة لاستدعاءات تابع معيّن. | تمنع الكلمة <code>undef</code> الصنف الحاليّ من الاستجابة لاستدعاءات تابع معيّن.<syntaxhighlight lang="ruby"> | ||
<syntaxhighlight lang="ruby"> | |||
undef my_method | undef my_method | ||
</syntaxhighlight> | </syntaxhighlight>كما بإمكانك استخدام [[Ruby/Symbol|الرموز]] بدلًا من اسم التابع:<syntaxhighlight lang="ruby"> | ||
كما بإمكانك استخدام الرموز بدلًا من اسم التابع: | |||
<syntaxhighlight lang="ruby"> | |||
undef :my_method | undef :my_method | ||
</syntaxhighlight> | </syntaxhighlight>وتستطيع تطبيقها على عدد من التوابع معًا:<syntaxhighlight lang="ruby"> | ||
وتستطيع تطبيقها على عدد من التوابع معًا: | |||
<syntaxhighlight lang="ruby"> | |||
undef method1, method2 | undef method1, method2 | ||
</syntaxhighlight> | </syntaxhighlight>وبإمكانك استخدامها ضمن أيّ نطاق. انظر صفحة التوثيق <code>[[Ruby/Module/undef method|Module.undef_method]]</code> لمزيد من التفاصيل. | ||
وبإمكانك استخدامها ضمن أيّ نطاق. انظر صفحة التوثيق Module | ==الكلمة المفتاحية <code>?defined</code>== | ||
== | عند استعمال الكلمة الفتاحية <code>?defined</code>، فإنها تعيد وصفًا لنوع الوسيط المُمرّر إليها: <syntaxhighlight lang="ruby"> | ||
عند | p defined?(UNDEFINED_CONSTANT) # nil تطبع | ||
<syntaxhighlight lang="ruby"> | p defined?(RUBY_VERSION) # "constant" تطبع | ||
p defined?(UNDEFINED_CONSTANT) # تطبع | p defined?(1 + 1) # "method" تطبع | ||
p defined?(RUBY_VERSION) # | </syntaxhighlight>لست مضطرًا لاستخدام الأقواس مع <code>?defined</code> إلا أنّه من الأفضل استخدامها بسبب انخفاض أولويّتها. فعلى سبيل المثال إذا أردت أن تتحقّق من تعريف متغيّر ما وأنّ قيمته تساوي الصفر، فاكتب التالي:<syntaxhighlight lang="ruby"> | ||
p defined?(1 + 1) # | |||
</syntaxhighlight> | |||
لست مضطرًا لاستخدام الأقواس مع defined | |||
<syntaxhighlight lang="ruby"> | |||
defined? @instance_variable && @instance_variable.zero? | defined? @instance_variable && @instance_variable.zero? | ||
</syntaxhighlight> | </syntaxhighlight>سيكون الناتج "expression" وليس هذا الذي تريده في حال لم يكن المتغيّر معرّفًا.<syntaxhighlight lang="ruby"> | ||
سيكون الناتج | |||
<syntaxhighlight lang="ruby"> | |||
@instance_variable = 1 | @instance_variable = 1 | ||
defined?(@instance_variable) && @instance_variable.zero? | defined?(@instance_variable) && @instance_variable.zero? | ||
</syntaxhighlight> | </syntaxhighlight>من الأفضل إضافة الأقواس عند التحقّق من كون المتغيّر معرّفًا أم لا، وستكون النتيجة <code>nil</code> في حال لم يكن معرّفًا و <code>false</code> في حال كونه لا يساوي الصفر. | ||
من الأفضل إضافة الأقواس عند التحقّق من كون المتغيّر | |||
وهناك توابع مكافئة مثل instance_variable_defined | وهناك توابع مكافئة مثل <code>?instance_variable_defined</code> لأجل [[Ruby/assignment#.D9.85.D8.AA.D8.BA.D9.8A.D8.B1.D8.A7.D8.AA .D8.A7.D9.84.D9.86.D8.B3.D8.AE.D8.A9|متغيّرات النسخة]] أو <code>?const_defned</code> لأجل الثوابت، إذ تعدّ هذه التوابع أقلّ عرضةً للخطأ من استخدام <code>?defined</code>. | ||
== BEGIN و END == | ==<code>BEGIN</code> و <code>END</code>== | ||
تستخدم BEGIN لتعريف كتلة برمجيّة تُنفّذ قبل أي جزء آخر من الشيفرة البرمجيّة في الملفّ الحالي. وعادة ما تستخدم في العمليات البرمجية ذات السطر الواحد باستخدام ruby -e. وبالمثل، تستخدم END لتعريف كتلة برمجيّة تنفّذ بعد تنفيذ كامل الشيفرة البرمجيّة. | تستخدم الكلمة <code>BEGIN</code> لتعريف كتلة برمجيّة تُنفّذ قبل أي جزء آخر من الشيفرة البرمجيّة في الملفّ الحالي. وعادة ما تستخدم في العمليات البرمجية ذات السطر الواحد باستخدام <code>ruby -e</code>. وبالمثل، تستخدم الكلمة <code>END</code> لتعريف كتلة برمجيّة تنفّذ بعد تنفيذ كامل الشيفرة البرمجيّة. | ||
يجب أن تُكتب BEGIN في المستوى الأعلى، وستسبب END تنبيهًا إذا استخدمت ضمن تابع. وإليك | |||
<syntaxhighlight lang="ruby"> | يجب أن تُكتب <code>BEGIN</code> في المستوى الأعلى، وستسبب <code>END</code> تنبيهًا إذا استخدمت ضمن تابع. وإليك المثال التالي:<syntaxhighlight lang="ruby"> | ||
BEGIN { | BEGIN { | ||
count = 0 | count = 0 | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight>يجب أن تستخدم الأقواس <code>{</code> و <code>}</code> ، ولا تستخدم <code>do</code> و <code>end</code>. | ||
يجب أن تستخدم الأقواس { و } ، ولا تستخدم do و end. | |||
المثال التالي هو سطر برمجيّ يجمع أرقامًا مدخلةً من مجرى الدخل القياسيّ أو من أيّ ملف في قائمة الوسائط:<syntaxhighlight lang="ruby"> | |||
<syntaxhighlight lang="ruby"> | |||
ruby -ne 'BEGIN { count = 0 }; END { puts count }; count += gets.to_i' | ruby -ne 'BEGIN { count = 0 }; END { puts count }; count += gets.to_i' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== مصادر == | |||
* [https://ruby-doc.org/core-2.5.1/doc/syntax/miscellaneous_rdoc.html صفحة miscellaneous في توثيق روبي الرسمي.]<noinclude>{{DISPLAYTITLE:صيغ متنوعة في روبي}}</noinclude> | |||
[[تصنيف: Ruby]] | |||
[[تصنيف: Ruby Syntax]] |
المراجعة الحالية بتاريخ 08:34، 19 نوفمبر 2018
سنتطرق في هذه الصفحة إلى شرح بقية الصيغ والبنى المستعملة في روبي والتي لم تُشمَل في الأقسام السابقة. ستجد هنا شرحًا حول الصيغة المستعملة في إنهاء التعبيرات البرمجية في روبي، وكيفية استعمال المسافات البادئة بالإضافة إلى شرح الكلمات المفتاحية 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'