الطرق methods في جافا هي الدوال functions ونستخدم الاسمين بالتبادل، وهي تستخدم لتعريف مجموعة من الاوامر التي تمثل عملية او اجراء معين . ولكي تكون الدوال/الطرق مفيدة ويعاد استخدامها، تقبل الطرق methods مجموعة من المدخلات inputs وتقوم باجراء العمليات والاوامر بناءا عن هذة المدخلات ثم تقوم بارجاع النواتج outputs، مثلا اذا اردنا ان نكتب ​دالة function تقوم بحساب الضرائب للموظفين، تكون مكونات الدالة:

  • المدخلات (inputs) وهي المرتب.
  • يكون الناتج (output) هو الضريبة.
  • الكود داخل الدالة هو حساب الضريبة على حسب الشرائح. وعادة ما نسمي الكود بداخل الدالة او الاوامر التي تقوم بعملها، بجسم (Body) الدالة.

عندما نريد استخدام الدوال نسمي ذلك بالمناداه (calling) اي ننادي على الدالة (function calling). في الجافا تتكون الطرق (methods) من مجموعة من المكونات كالاتية

  • المغيرات (modifiers) وهي تستخدم لتحديد كيفية مناداة الدالة ومن له الحق في منادتها.
  • نوع الراجع (return type) وهو نوع بيانات الناتج من الدالة.
  • اسم الطريقة (methodName) وهو الاسم الذي نعرف به الدالة و نستطيع ان نستخدمه لمنادة الدالة.
  • العوامل المدخلات (input parameters) وهي التي نعرف ونصف بها نوع المدخلات التي تستخدمها الدالة وهي اختيارية فقد لا تحتاج الدالة مدخلات
  • جسم الطريقة (method body) و هي الاوامر التي تنفذها الطريقة.
  • ارجع (return) وهي امر الارجاع وهو اختياري اذا كانت الدالة لا تقوم بارجاع ناتج

قواعد الكتابة Syntax

// طريقة التعريف
modifier returnType methodName (Input Parameters) {
   // جسم الطريقة(الاوامر) 
   return result;// جملة اختيارية اذا كان هناك ناتج
}


// طريقة مناداة الدالة

// في حالة اذا كنا لا نريد الناتج منها او لا يوجد ناتج
nameOfMethod(inputs);
// في حالة اذا كنا نريد استخدام ناتج الطريقة فنقوم بتخزبنه في متغير من نفس نوع ناتجها
returnType variableName = nameOfMethod(inputParameters);

لنجرب مثالا لدالة تحسب الضرائب وترجع قيمتها

تشغيل
public static double calculateTaxes(double salary){
	double taxes;// نبدأ بتعريف متغير الضرائب والذي سوف نقوم بارجاعه
	if(salary < 2000){ // اذا كان المرتب اقل من 2000
		taxes = 0; // الضرائب بصفر
	}
	else if (salary < 4000){ // عندما يكون المرتب اعلى من او يساوي 2000 واقل من 4000 
		taxes = salary * .10; // %تكون الضرائب نسبة 10
	}
	else if (salary < 10000){ // عندما يكون المرتب اعلى من او يساوي 4000 واقل من 10000
		taxes = salary * .15; // %تكون الضرائب نسبة 15
	}
	else{ // اذا كانت غير ذلك اي اكبر من 10000
		taxes = salary * .20; // %تكون الضرائب نسبة 20
	}
	
	return taxes; 
}

تشرح الكود بالاعلى:
* المغيرات (modifiers): هي public static (سيتم شرحه في الدروس اللاحقه)
* نوع الراجع (return type): هو double
* اسم الطريقة (methodName): هو calculateTaxes
* العوامل المدخلات (input parameters): هو salary ويجب تعريف نوعه وهو double فيكون double salary
* جسم الطريقة (method body): هو كل الكود ما بين حدود الدالة اي ما بين {}
* الارجاع (return) : هو return taxes حيث ان taxes تحتوي على ناتج الارجاع وهي من نفس نوع الراجع (return type).

ملحوظة: ان لم يكون هناك راجع يكون نوع الراجع (return type): هو => void،اي انه فارغ او خالي

ويكون طريقة نداء الدالة (function) بالاعلى كالاتي:

تشغيل
// الموظف الاول مرتبه يساوي 8000
double employeeSalaryA = 8000;
// ننادي على دالة حساب الضرائب
double employeeTaxesA = calculateTaxes(employeeSalaryA); // %الراجع يكون 1200 وهو نسبة 15
System.out.println(employeeTaxesA);
// الموظف الاول مرتبه يساوي 20000
double employeeSalaryB = 20000;
// ننادي على دالة حساب الضرائب
double employeeTaxesB = calculateTaxes(employeeSalaryB); // %الراجع يكون 4000 وهو نسبة 20
System.out.println(employeeTaxesB);
ملحوظة: عندما نادينا الدالة(function) لم يكن اسم المتغير   الذي ادخلنا مثل الموجود عند تعريف الدالة، لان هذا ليس شرطا. لكن يجب ان يكون من نفس النوع والا حدث خطأ في البرنامج (error).

حالات خاصة

دالة بلا ارجاع؟

اذا اردنا ان نعرف دالة لا تقوم بارجاع ناتج يجب ان يكون نوع الراجع (returnType) ب void و هي احدى الكلمات المحجوزة (Reserved Words) في الجافا وتستخدم في هذة الحالة، مثال

// دالة لا ترجع ناتج
public static void sayHello(String name){
	System.out.println("Hello, "+ name);
}

وعندما نناديها يكون كالاتي:

String name = "Mohammad";
sayHello(name); // output => Hello, Mohammad

sayHello("Hanafy"); // output => Hello, Hanafy


String output = sayHello("Hanafy");// البرنامج سيظهر خطأ، لانه لا يوجد ناتج فلا يجوز وضع الناتج في متغير

كما لاحظنا من المثال السابق، لا يجوز وضع الناتج في متغير مثل output لاننا عند تعريف الدالة قولنا انها void

دالة بدون مدخلات Input parameters

احيانا نريد ان نكتب دالة لا تحتاج الى مدخلات (inputs) مثل:

public static void sayHelloAll(){
	System.out.println("Hello, All");
}

ونناديها كالاتي:

sayHelloAll();// output => Hello, All

التحميل Overloading

في الجافا نستطيع ان نعرف اكثر من طريقة بنفس الاسم لكن يجب ان يكون عدد العوامل المدخلات (input parameter) مختلفة او من انواع مختلفة

public static void sayHello(){
	System.out.println("Hello, All"); 
}

public static void sayHello(String s){
	System.out.println("Hello, "+ s);
}

public static void sayHello(int i){
	for(int j =0; j < i; j++ ){
		System.out.print("Hello ");
	}
}

sayHello();// Hello, All
sayHello("Ahmed");// Hello, Ahmed 
sayHello(2);// Hello Hello

guest
0 تعليقات
Inline Feedbacks
اظهر كل التعليقات