الرئيسية / جافا / أساسيات في البرمجة بالجافا / ابسط شرح للتمرير بالمرجع و التمرير بالقيمة مع حيلة لتعمل الجافا بالتمرير بالمرجع

ابسط شرح للتمرير بالمرجع و التمرير بالقيمة مع حيلة لتعمل الجافا بالتمرير بالمرجع

تختلف لغات البرمجة في هيكلاتها و قدراتها و طرق عملها، ما صنع تداخلاً في المفاهيم و ربما خلطاً لمن يستخدم أكثر من لغة برمجة.

من هذه المفاهيم التي تختلف فيها لغات البرمجة طريقة تمرير المتغيرات.

تمرير المتغيرات يعني إرسال المتغيرات إلى وسائط أخرى مثل الدوال و منشئات الفئات Constructors.

تُمرر المتغيرات إلى هذه الدوال بصورة عامة إما من أجل إستخدامها في إجراءات محددة أو من أجل إجراء تعديل على هذه القيم.

هناك طريقتان للتمرير:

  1. التمرير بالقيمة pass by value.
  2. التمرير بالمرجع 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;
    }

هل الجافا تعمل بالتمرير بالمرجع أم التمرير بالقيمة؟

الجافا دوماً تعمل بالتمرير بالقيمة، لذلك لا بُد أن يُراعى أن المتغيرات التي تعرف داخل الدوال تكون خاصة بالدوال فقط و إن تطابقت الأسماء مع المتغيرات بالدوال الأخرى.

أما ما تستطيع فعله حتى تتحصل على قيمة مشابهة للتمرير بالمرجع فما عليك إلا أن تجعل الدالة تُعيد القيمة النهائية ثُم أسند هذه القيمة إلى المتغير الذي ترغب بالتعديل عليه كما في الشفرة المصدرية التالية

    public static void main(String args[]) {

        int age = 10;
        age = multiplyAge(age);
        //age = 20;
    }//end main

    private static int multiplyAge(int age) {
        age = age * 2;
        return age;
    }

هذه الصورة توضح الفرق تماماً بين التمرير بالمرجع pass by reference و التمرير بالقيمة pass by value

شرح التمرير بالمرجع و التمرير بالقيمة

شارك هذه المعلومة مع أصدقائك المبرمجين 🙂

عن مصطفى الطيب

مصطفى الطيب
صديقٌ لنُظمِ المعلُومات و عُلومِ الحَاسِب و مُختصٌ بهما، مُحبٌ للعِلمِ و نَشرِه. أُشاركُ معارفي و تَجاربي و خِبراتي في تَدويناتٍ و دوراتٍ من خلال مُدونةِ عُلوم.

أضف تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *