العودة إلى الدورة

معلمات الدالة، والوسائط، والتمرير بالقيمة

إتقان لغة Java: من الصفر إلى مطور محترف (رحلة من 50 درساً)

الدرس 15: معلمات الدالة، والوسائط، والتمرير بالقيمة

غالبًا ما تحتاج الدوال إلى بيانات مدخلة لأداء مهامها. يتم تمرير هذه البيانات عبر المعلمات والوسائط.

1. المعلمات (Parameters) مقابل الوسائط (Arguments)

  • المعلمات (Parameters): هي المتغيرات المحددة في توقيع الدالة (التعريف) التي تستقبل البيانات.
  • الوسائط (Arguments): هي القيم الفعلية التي يتم تمريرها إلى الدالة عند استدعائها.

java public class Greeting { // name و hour هما PARAMETERS public void greet(String name, int hour) { String timeOfDay = (hour < 12) ? "Morning" : "Evening"; System.out.println("Good " + timeOfDay + ", " + name); } }

// استدعاء الدالة Greeting g = new Greeting(); // "Sarah" و 9 هما ARGUMENTS g.greet("Sarah", 9);

2. لغة Java دائماً تمرر بالقيمة (Pass-by-Value)

عند تمرير وسيط إلى دالة، تستخدم Java دائماً التمرير بالقيمة. هذا يعني أنه يتم تمرير نسخة من القيمة.

الأنواع الأولية (تمرير بالقيمة)

إذا قمت بتمرير نوع أولي (int, double ، إلخ)، تتلقى الدالة نسخة. التغييرات داخل الدالة لا تؤثر على المتغير الأصلي.

java public void changePrimitive(int number) { number = 99; // يغير نسخة المتغير فقط }

int x = 10; changePrimitive(x); // x لا تزال 10 خارج الدالة

الكائنات (تمرير القيمة للمرجع)

عند تمرير كائن، لا تزال Java تمرر نسخة من القيمة — لكن تلك القيمة هي عنوان الذاكرة (المرجع) للكائن.

  • يمكنك تعديل محتويات الكائن: لأن كلاً من المتغير الأصلي والمعلمة يشيران إلى نفس الكائن في الذاكرة.
  • لا يمكنك تغيير ما يشير إليه المتغير الأصلي: إذا قمت بتعيين كائن جديد تماماً للمعلمة داخل الدالة، فإن المتغير الأصلي في الخارج يظل دون تغيير.

java // نفترض أن Person فئة بها خاصية name public void changeObject(Person p) { p.setName("Changed Name"); // صحيح: يعدل حالة الكائن

// p = new Person("New Reference"); // يفشل في تغيير المرجع الأصلي

}