الدوال — الأساسيات

الدوال (Methods) هي كتل من الكود يمكن إعادة استخدامها. في هذا الدرس، سنتعلم كيفية تعريف واستدعاء الدوال.

تعريف الدالة

JAVA
access_modifier return_type method_name(parameters) {
    // الكود هنا
    return value;  // إذا كان نوع الإرجاع ليس void
}

مثال: دالة بسيطة

JAVA
public static void sayHello() {
    System.out.println("مرحباً!");
}

// الاستدعاء
sayHello();  // مرحباً!
▶ جرّب الكود

المعلمات (Parameters)

دالة بمعلمة واحدة

JAVA
public static void greet(String name) {
    System.out.println("مرحباً، " + name + "!");
}

// الاستدعاء
greet("أحمد");  // مرحباً، أحمد!

دالة بعدة معلمات

JAVA
public static void printInfo(String name, int age) {
    System.out.println("الاسم: " + name + "، العمر: " + age);
}

// الاستدعاء
printInfo("أحمد", 25);  // الاسم: أحمد، العمر: 25

المعلمات الافتراضية (Java 8+)

JAVA
// لا توجد معلمات افتراضية في Java، لكن يمكنك استخدام overload
public static void greet(String name) {
    System.out.println("مرحباً، " + name + "!");
}

public static void greet() {
    System.out.println("مرحباً، ضيف!");
}

القيم المرجعة (Return)

دالة تُرجع قيمة

JAVA
public static int add(int a, int b) {
    return a + b;
}

// الاستدعاء
int result = add(5, 3);  // result = 8

دالة تُرجع String

JAVA
public static String getFullName(String firstName, String lastName) {
    return firstName + " " + lastName;
}

// الاستدعاء
String name = getFullName("أحمد", "محمد");  // "أحمد محمد"

دالة تُرجع boolean

JAVA
public static boolean isEven(int number) {
    return number % 2 == 0;
}

// الاستدعاء
boolean even = isEven(4);  // true
boolean odd = isEven(5);   // false

void مقابل return

void return
لا تُرجع قيمة تُرجع قيمة
public static void print() public static int add()
return; أو بدون return return قيمة;

مثال

JAVA
// void — لا تُرجع قيمة
public static void printArray(int[] arr) {
    for (int num : arr) {
        System.out.print(num + " ");
    }
    System.out.println();
}

// return — تُرجع قيمة
public static int findMax(int[] arr) {
    int max = arr[0];
    for (int num : arr) {
        if (num > max) max = num;
    }
    return max;
}
▶ جرّب الكود

تحميل الدوال (Method Overloading)

يمكن أن تحمل الدالة نفس الاسم بشرط أن تختلف في المعلمات:

JAVA
public static int add(int a, int b) {
    return a + b;
}

public static double add(double a, double b) {
    return a + b;
}

public static int add(int a, int b, int c) {
    return a + b + c;
}

// الاستدعاء
add(5, 3);       // 8 (int)
add(5.0, 3.0);   // 8.0 (double)
add(5, 3, 2);    // 10 (int)

النطاق (Scope)

المتغيرات المحلية

JAVA
public static void myMethod() {
    int x = 10;  // نطاق x داخل myMethod فقط
    System.out.println(x);  // ✅ صحيح
}

// System.out.println(x);  // ❌ خطأ: x غير معرّف هنا

المتغيرات في الحلقات

JAVA
for (int i = 0; i < 5; i++) {
    int temp = i * 2;  // نطاق temp داخل الحلقة فقط
    System.out.println(temp);
}
// System.out.println(i);    // ❌ خطأ
// System.out.println(temp); // ❌ خطأ

❓ أسئلة شائعة

س ما الفرق بين الدالة والإجراء (Procedure)؟
ج في Java، لا يوجد فرق — كل شيء دالة. الدوال void تسمى إجراءات في لغات أخرى.
س لماذا نستخدم static في main؟
ج لأن Java تستدعي main بدون إنشاء كائن. static تسمح باستخدام الدالة مباشرة.
س هل يمكن أن تحتوي الدالة على دوال أخرى؟
ج لا، لا يمكن تعريف دالة داخل دالة في Java. لكن يمكنك استدعاء دوال من داخل دوال.

📖 ملخص

📝 تمارين

  1. حاسبة: اكتب دوال للجمع والطرح والضرب والقسمة
  2. تحويل الوحدات: اكتب دوال لتحويل بين الدرجات والسلسيوس والفارنهايت
  3. المصفوفات: اكتب دوال لإيجاد الحد الأقصى والأدنى والمتوسط

الدرس التالي

في الدرس التالي، سنتعلم الدوال المتقدمة — Lambda والدوال المتكررة.

100%