البرمجة

تفسير الفروق في تغيير قيم المتغيرات في Ruby

عند التفاعل مع متغيرات Ruby في سياق استدعاء الطرق (method invocation) وإنشاء المتغيرات داخل نطاق معين، يمكن أن تحدث بعض الالتباسات التي يجب فهمها بعناية لتجنب الارتباك. لنلقِ نظرة عن كثب على الأمثلة التي قدمتها.

في السياق الأول:

ruby
a = 5 # المتغير يتم تهيئته في النطاق الخارجي 3.times do |n| a = 3 # هل يمكن الوصول إلى a هنا، في النطاق الداخلي؟ end puts a

القيمة المطبوعة لـ a في هذا السياق هي 3. هذا يحدث لأن a متاح للنطاق الداخلي الذي تم إنشاؤه بواسطة 3.times do ... end، مما سمح للكود بإعادة تعيين قيمة a. في الواقع، تمت إعادة تعيينها ثلاث مرات لتصبح 3.

أما في السياق الثاني:

ruby
a = 5 def adder(num) num = 3 end adder a # 3 puts a # 5

القيمة المطبوعة لـ a هنا هي 5، وليس 3. ذلك لأنه عند استدعاء الطريقة adder، يتم تمرير قيمة a إلى المتغير num المحلي داخل الطريقة. وعند تغيير قيمة num داخل الطريقة، لا يؤثر ذلك على القيمة الأصلية لـ a في النطاق الخارجي.

تختلف النتائج بسبب الاختلاف في كيفية التعامل مع النطاقات والمتغيرات المحلية في كل حالة. في الحالة الأولى، تم تعديل قيمة a في النطاق الداخلي، بينما في الحالة الثانية، تم تمرير قيمة a إلى داخل الطريقة دون تأثير على القيمة الأصلية لـ a في النطاق الخارجي.

المزيد من المعلومات

عند التعامل مع لغة Ruby، يجب أن نأخذ في اعتبارنا بعض المفاهيم الأساسية المتعلقة بالنطاقات والمتغيرات. سنقوم بتوضيح بعض النقاط الأخرى لفهم أفضل.

  1. النطاقات (Scopes):

    • في Ruby، هناك نطاقات مختلفة مثل النطاق العام (global scope) والنطاق الداخلي للفئة (class scope) والنطاق الداخلي للطريقة (method scope).
    • تستخدم الكلمة المفتاحية do...end لإنشاء نطاق داخلي للكود.
  2. المتغيرات المحلية (Local Variables):

    • المتغيرات المحلية تكون محدودة بالنطاق الذي تم إنشاؤه فيه.
    • عندما يتم تعريف متغير في النطاق الخارجي ويتم استخدامه داخل نطاق داخلي، يمكن تغيير قيمته داخل النطاق الداخلي.
  3. استدعاء الطرق (Method Invocation):

    • عند استدعاء الطرق في Ruby، يتم إنشاء نطاق داخلي للطريقة يحتوي على متغيرات محلية.
    • قيم المتغيرات المحلية داخل الطريقة لا تؤثر على المتغيرات خارج الطريقة.

الفهم الجيد لهذه المفاهيم يساعد في تجنب الالتباسات والأخطاء البرمجية. في المثال الثاني الذي قدمته، تم تمرير قيمة a إلى داخل الطريقة adder وتم تغيير قيمة المتغير المحلي num داخل الطريقة، ولكن هذا لا يؤثر على القيمة الأصلية لـ a في النطاق الخارجي، مما يفسر لماذا تم طباعة قيمة a كـ 5، وليس 3.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!