الوحدة 1: الدوال · الموضوع 1 من 17
الموضوع 1

الدوال المعرّفة من قبل المستخدم

كتلة من الأوامر لها اسم ووظيفة، نكتبها مرة واحدة ونستدعيها كلما احتجنا إليها.

4, 98 sum(a, b, c)return s; 21 argumentsreturn int z = sum(4, 9, 8);
بعد هذا الدرس ستستطيع أن:
  • تعرّف الدالة، وتحدد أجزاء رأسها: محدد الوصول، ونوع القيمة المرجعة، والاسم، والمعاملات.
  • تستدعي دالة من main، وتتتبّع انتقال التنفيذ إليها ثم عودته.
  • تميّز بين المعاملات parameters والوسيطات arguments في مثال معطى.
  • تكتب دالة تعيد قيمة باستخدام return، وتستقبل ناتجها في متغير.
  • تطبّق التحميل الزائد Overloading، وتكتب دالة تستدعي نفسها Recursion بشرط توقّف.

١ما هي الدالة؟

تُسمّى دالة function أو طريقة method: كتلة من التعليمات البرمجية لها اسم ووظيفة، تُستدعى باسمها، وقد تُمرَّر لها بيانات لتعمل عليها. وتُعرَّف دائمًا داخل كلاس.

أجزاء رأس الدالة (توقيعها signature)

publicمحدد الوصول
staticثابتة
intنوع القيمة الراجعة
sumاسم الدالة
(int x, int y)المعاملات
الصيغة العامة
access static return_type method_name(parameters){    statement1;    statement2;}
الجزءمعناه
public / private / protectedمحدد الوصول: من يستطيع استدعاء الدالة. إن لم يُكتب يكون default.
staticتُستدعى مباشرة دون إنشاء كائن (نحتاجها الآن لأننا نستدعي من main الثابتة).
void / int / String …نوع القيمة التي تعيدها الدالة، و void تعني «لا تعيد شيئًا».
الاسميتبع قواعد تسمية المتغيرات.
المعاملاتمتغيرات تستقبل البيانات المرسلة عند الاستدعاء، وتُعامل كمتغيرات محلية.

٢لماذا نكتب دوالًّا؟

♻️ إعادة الاستخدامتُكتب مرة واحدة وتُستدعى مرات عديدة.
🧩 فرّق تسُدتقسيم المسألة الكبيرة إلى وحدات صغيرة يسهل كتابتها وتتبّعها وصيانتها.
✂️ أسطر أقلتفادي تكرار الأوامر التي تؤدي المهمة نفسها.
🎁 التجريدتستدعي الدالة بالطريقة الصحيحة دون أن تهتم بتفاصيل عملها الداخلية.

٣إنشاء الدالة واستدعاؤها

لاستدعاء دالة نكتب اسمها ثم قوسين ثم فاصلة منقوطة. ينتقل التنفيذ إلى جسمها، ثم يعود إلى السطر التالي.

🔎 تتبّع: كيف ينتقل التنفيذ إلى الدالة ويعود؟
Methods.java
package methods;public class Methods {    public static void main(String[] args) {        write_msg();        System.out.println("Hi. I am the main () function");        write_msg();        write_msg();    }    static void write_msg(){        System.out.println("Hello. This is the write_msg() function");    }}
Variables · المتغيّرات في الذاكرة
Output×

ويمكن استدعاء الدالة نفسها عدة مرات: write_msg(); write_msg(); write_msg();

٤المعاملات parameters والوسيطات arguments

Methods.java
package methods;public class Methods {    public static void main(String[] args) {        sum(2, 4, 9);        sum(8, 3);    }    static void sum(int a, int b){        System.out.println(a + b);    }    static void sum(int a, int b, int c){        int s = a + b + c;        System.out.println(s);    }}
Output – JavaApplication (run)×
run:
15
11
BUILD SUCCESSFUL (total time: 0 seconds)
المعامل parameterالوسيطة argument
أين؟في رأس الدالة عند تعريفهافي جملة الاستدعاء
ما هو؟متغير يستقبل القيمةالقيمة الحقيقية المرسلة
في المثالa , b في الدالة sum8 , 3 عند الاستدعاء في السطر 5

شروط الاستدعاء الصحيح

٥دالة تعيد قيمة

نضع نوع القيمة بدل void، ونعيد النتيجة بالكلمة return.

Methods.java
package methods;public class Methods {    public static void main(String[] args) {        sum(8, 3);        System.out.println( sum(2, 4, 9) );        int z = sum(4, 9, 8);        System.out.println(z);    }    static void sum(int a, int b){        System.out.println(a + b);    }    static int sum(int a, int b, int c){        int s = a + b + c;        return s;    }}
Output – JavaApplication (run)×
run:
11
15
21
BUILD SUCCESSFUL (total time: 0 seconds)

٦التحميل الزائد Overloading

عدّة دوال بالاسم نفسه في الكلاس نفسه، تختلف في عدد المعاملات أو أنواعها أو ترتيبها. يختار المترجِم النسخة المناسبة حسب الوسيطات.

مثاله في الدرس: دالتا sum في القسم ٤ (معاملان وثلاثة)، والتدريب العملي 3 أدناه (int و double).

Methods+ main(args : String[]) : void~ write_msg() : void~ sum(a : int, b : int) : void~ sum(a : int, b : int, c : int) : int
🧩 الكلاس Methods من أمثلة الدرس: الدوال الثابتة static مسطّرة، و~ تعني محدد الوصول الافتراضي (لم يُكتب)، والنوع الراجع بعد النقطتين.
+ public- private# protected~ defaultمسطّر: staticمائل: abstract

٧الاستدعاء الذاتي Recursion

الدالة تستدعي نفسها من داخلها، فتغني عن جملة التكرار. أهم شيء فيها شرط التوقّف؛ بدونه تستدعي نفسها إلى ما لا نهاية حتى يمتلئ المكدّس.

🔎 تتبّع المكدّس: كل استدعاء ينتظر الذي بعده
Main.java
public class Main{    static void myprint(int i)    {        if (i <= 5)        {            System.out.println(i);            i++;            myprint(i);        }    }     public static void main(String[] args)    {        myprint(1);        System.out.println("انتهى البرنامج");    }}
Variables · المتغيّرات في الذاكرة
Output×

التدريب العملي 1: إنشاء دوال واستدعاؤهادالة sendMessage بثلاث صور (تحميل زائد) تُستدعى من main.افتح التدريب ←التدريب العملي 2: دالة تعيد قيمة ودالة بمعاملينsum تعيد مجموع عددين، وprintText تطبع نصًّا عددًا من المرات.افتح التدريب ←التدريب العملي 3: تدريب إضافي على التحميل الزائد Overloadingدالتان بالاسم sum: الأولى للأعداد الصحيحة والثانية للعشرية. لاحظ أيّهما تُستدعى في الحالة الثالثة.افتح التدريب ←التدريب العملي 4: الاستدعاء الذاتي Recursionطباعة 1 إلى 5 مرتين: بحلقة for، ثم بدالة تستدعي نفسها.افتح التدريب ←

توقّع وتحقّق

أجب قبل أن تنظر إلى الشرح. التصحيح فوري، وإجاباتك تُحفظ.

اختر الإجابة الصحيحة:
لدينا تعريف الدالة

snippet
static void myFunction() { }

الاستدعاء الصحيح لها من داخل دالة main هو:

نكتب اسم الدالة ثم قوسين ثم فاصلة منقوطة.

دالة تستقبل ثلاثة أعداد وتعيد أكبرها، ما نوع القيمة المرجعة لها؟

تعيد عددًا صحيحًا، وتنتهي بـ return max;

تأمل الكود التالي،
ماذا سيكون الناتج عند تنفيذه؟

snippet
static void p(String name, int x) {    for (int i = 1; i <= x; i++)        System.out.println(i + ". " + name);} public static void main(String[] args) {    p("Ali", 2);}
استُدعيت الدالة بالقيمة 2 للمعامل x، فتتكرر الحلقة مرتين.

أي زوج من الدوال التالية يمثّل تحميلًا زائدًا Overloading صحيحًا؟

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

الخلاصة

انتقل إلى تقييم الدرسأسئلة التقييم، وأكمل الفراغات.ابدأ التقييم ←
أنهيت وحدة «الدوال»ثبّت ما تعلّمته بأسئلة مراجعة لمواضيع الوحدة.ابدأ المراجعة ←