الدرس 10: التمرير بالقيمة والنطاق
في الدرس السابق تعلّمنا كيف نمرّر القيم إلى دالة — لكن ماذا تستقبل الدالة فعليًا؟ في C يُمرَّر كل وسيط بالقيمة: تحصل الدالة على نسخة، وتغيير النسخة لا يمسّ الأصل أبدًا. لهذا فإن دالة swap 'البريئة' التي تبدّل معاملاتها تترك متغيرات المُستدعي كما كانت تمامًا. سنتعرّف أيضًا على النطاق (scope): المتغير
تمرير متغير إلى دالة يشبه إرسال نسخة مصوّرة من مستند: من يحصل على النسخة يمكنه أن يخربش عليها كما يشاء — ويبقى مستندك الأصلي نظيفًا تمامًا.
- التمرير بالقيمة
- طريقة التمرير في C: تستقبل الدالة نسخة من القيمة، لا المتغير نفسه.
- نسخة
- القيمة التي تُوضَع في المعامل عند الاستدعاء. تغييرها لا يؤثر على متغير المُستدعي.
- النطاق (scope)
- المنطقة في الكود حيث يوجد المتغير ويكون متاحًا — عادةً الكتلة التي عُرِّف فيها.
- متغير محلي
- متغير معرَّف داخل دالة أو كتلة: يولد عند بداية الكتلة، ويزول عند نهايتها.
- متغير عام
- متغير معرَّف خارج جميع الدوال ومرئي لها كلها. موجود، لكن يُفضَّل تجنّبه — من الصعب تتبّع من يغيّره.