تختلف لغات البرمجة في هيكلاتها و قدراتها و طرق عملها، ما صنع تداخلاً في المفاهيم و ربما خلطاً لمن يستخدم أكثر من لغة برمجة.
من هذه المفاهيم التي تختلف فيها لغات البرمجة طريقة تمرير المتغيرات.
تمرير المتغيرات يعني إرسال المتغيرات إلى وسائط أخرى مثل الدوال و منشئات الفئات Constructors.
تُمرر المتغيرات إلى هذه الدوال بصورة عامة إما من أجل إستخدامها في إجراءات محددة أو من أجل إجراء تعديل على هذه القيم.
هناك طريقتان للتمرير:
- التمرير بالقيمة pass by value.
- التمرير بالمرجع pass by reference.
ستتعرف في هذه التدوينة على نوعي التمرير و أمثلة لهما كما ستتعرف إلى طريقة التمرير التي تعمل بها الجافا و كيف تحتال على تلك الطريقة للوصول إلى أهدافك.
معنى التمرير بالقيمة Pass By Value
إذا كان لديك متغير age و مررته إلى الدالة multiply age و التي تقوم بمضاعفة العمر فإن المتغير age يحافظ على قيمته مهما حدث بداخل الدالة.
public static void main(String args[]) { int age = 10; multiplyAge(age); //age = 10; }//end main private static void multiplyAge(int age) { age = age * 2; }
معنى التمرير بالمرجع Pass By Reference
على عكس التمرير بالقيمة، فإن ما يحدث بالمتغير الذي يتم تمريره إلى الدالة يؤثر على المتغير الأصلي
//في لغة غير الجافا public static void main(String args[]) { int age = 10; multiplyAge(age); //age = 20; }//end main private static void multiplyAge(int age) { age = age * 2; }
هل الجافا تعمل بالتمرير بالمرجع أم التمرير بالقيمة؟
الجافا دوماً تعمل بالتمرير بالقيمة، لذلك لا بُد أن يُراعى أن المتغيرات التي تعرف داخل الدوال تكون خاصة بالدوال فقط و إن تطابقت الأسماء مع المتغيرات بالدوال الأخرى.
أما ما تستطيع فعله حتى تتحصل على قيمة مشابهة للتمرير بالمرجع فما عليك إلا أن تجعل الدالة تُعيد القيمة النهائية ثُم أسند هذه القيمة إلى المتغير الذي ترغب بالتعديل عليه كما في الشفرة المصدرية التالية
هذه الصورة توضح الفرق تماماً بين التمرير بالمرجع pass by reference و التمرير بالقيمة pass by value
شارك هذه المعلومة مع أصدقائك المبرمجين 🙂
مقال بسيط ورائع، بالتوفيق للمزيد