قيم الإرجاع في Java
اكتب دالة اسمها twice تأخذ int اسمه n وترجع ضعف ذلك العدد. يبدأ الرأس بـ int وليس void: static int twice(int n). داخل الأقواس المجعدة اكتب return n * 2;. في main اطبع نتيجة الاستدعاء: System.out.println(twice(7));. يجب أن تظهر الشاشة سطرًا واحدًا: 14. twice نفسها لا تستدعي println. هي فقط تُرجع 14. main يطبع ذلك العدد. ذلك الإرجاع هو ما تعلّمه هذه الصفحة.
أرجع عددًا إلى main
في صفحة parameters كانت greet و show تطبعان داخل جسم الدالة. الاستدعاء أرسل قيمة إلى الداخل، والدالة كتبت على الشاشة. هنا ما زالت الدالة تستقبل قيمة، لكنها ترسل قيمة أيضًا إلى الخارج. كلمة return تعلّم تلك القيمة الخارجة. يستطيع main أن يخزّنها أو يطبعها.
أنشئ ملف برنامج صغير باسم Box.java. يجب أن يطابق public class في السطر الأول اسم الملف: public class Box. لا تُبقِ اسم فئة قديمًا مثل Tip أو Chime في هذا الملف؛ المترجم يتوقع أن يتوافق اسم الفئة مع اسم الملف.
خارج main، وما زلت داخل أقواس الفئة المجعدة، اكتب:
static int twice(int n) {
return n * 2;
}
الرأس لم يعد يقول void. يقول int لأن القيمة التي ترجع هي int. بين الأقواس، int n ما زال معاملًا — نفس فكرة الصفحة السابقة. الجسم فيه أمر واحد: return n * 2;. ذلك يضرب n في 2 ويرسل الناتج إلى من استدعى twice. لا يوجد System.out.println داخل twice في هذه الصفحة. احفظ الملف قبل الترجمة.
Box.java مع twice
هذا هو البرنامج الصغير الكامل. twice يحسب. main يطبع.
public class Box {
public static void main(String[] args) {
System.out.println(twice(7));
}
static int twice(int n) {
return n * 2;
}
}
من المجلد الذي يحوي Box.java شغّل javac Box.java. عندما تتوافق الأقواس العادية والمجعدة والفواصل المنقوطة، لا يكتب javac سطرًا من عنده. ثم شغّل java Box — وليس java Box.java. احذف نهاية .java من الأمر الثاني. الأمران نفسهما يعملان على Windows وعلى macOS؛ هذه الصفحة لا تحتاج إملاء صدفة مختلفًا لأي نظام. يجب أن يطبع البرنامج سطرًا واحدًا ويتوقف: 14. لا يطلب منك الكتابة. إذا انتظر الطرفية إدخال لوحة المفاتيح، فما زال استدعاء nextLine من تمرين أقدم داخل الملف. احذف ذلك الاستدعاء وأبقِ System.out.println(twice(7)); مع دالة twice أعلاه. سطر خاطئ على الشاشة لا يعني أنك تحتاج تثبيت JDK جديدًا.
امشِ تشغيلًا واحدًا بالترتيب. Java يبدأ من main. الاستدعاء twice(7) يرسل 7 إلى n. داخل twice، return n * 2; يحسب 14 ويُرجع ذلك الـ 14 إلى main. ثم يكتب println الرقم 14. twice لم تكتب على الشاشة بنفسها. إذا غيّرت الاستدعاء إلى twice(3)، يجب أن تظهر الشاشة 6. جسم الدالة يبقى كما هو؛ يتغير الوسيط فقط، ويتغير الناتج المُرجع معه. إذا أظهرت الشاشة 7 بدل 14، فقد طبعت n داخل twice أو طبعت الوسيط في main دون استدعاء twice — ضع المضاعفة على سطر return واطبع نتيجة الاستدعاء.
يمكنك أيضًا الاحتفاظ بالقيمة المُرجعة في اسم داخل main قبل الطباعة:
int result = twice(7);
System.out.println(result);
ذلك يظهر أيضًا سطرًا واحدًا: 14. ينتهي الاستدعاء أولًا ويملأ result. ثم يكتب println قيمة result. الشكلان معًا — طباعة الاستدعاء مباشرة، أو التخزين ثم الطباعة — يستخدمان نفس return من twice.
اطبع القيمة التي استلمها main
غيّر فقط العدد في الاستدعاء إن أردت سطرًا مختلفًا على الشاشة. اترك return n * 2; كما هو. بعد كل تغيير ترجم وشغّل من جديد: javac Box.java ثم java Box. twice(0) يجب أن يطبع 0. twice(10) يجب أن يطبع 20. في كل مرة يطبع main ما أرجعته twice.
إذا بقي رأس twice يقول void بينما الجسم فيه return n * 2;، يكتب javac خطأً — void يعني أن شيئًا لا يرجع، فـ return بقيمة لا يناسب. إذا قال الرأس int ولم يكن في الجسم return، يكتب javac خطأً أيضًا — دالة int في هذا الشكل للمبتدئين يجب أن تُرجع int في كل مسار. إذا طبع الجسم ولم يُرجع أبدًا، فقد عدت إلى فكرة صفحة Tip؛ هذه الصفحة تريد الرقم في يد main.
void مقابل إرجاع مُنوَّع
اقرأ الشكلين جنبًا إلى جنب. دالة void تشغّل جسمها وتنتهي. دالة ذات إرجاع مُنوَّع يجب أن تُرجع قيمة بـ return. عندما لا يكون نوع الإرجاع void، يعامل main الاستدعاء على أنه تلك القيمة.
📊 جسم void مقابل return
| الشكل | ماذا تفعل الدالة | ماذا يفعل main غالبًا |
|---|---|---|
| void show(int n) | تطبع داخل الجسم | تستدعي show(9); وقد لا تطبع شيئًا آخر |
| int twice(int n) | return n * 2; | تطبع أو تخزّن twice(7) |
خلط شائع هو وضع System.out.println(n * 2); داخل twice وترك الرأس int بلا return. حينها يعترض javac، أو تعيد الرأس إلى void فلا يعود لديك قيمة ليطبعها main من الاستدعاء. خلط آخر هو كتابة return; بلا قيمة بينما الرأس يقول int. أبقِ return n * 2; حتى يطابق نوع التعبير المُرجع int. كتابة System.out.println("twice"); في main تطبع الكلمة twice؛ ولا تستدعي الدالة. أبقِ println(twice(7)) عندما تريد 14 على الشاشة.
عرض greet المتبقي من صفحة Tip الذي يطبع فقط hi lena داخل الدالة يمكن أن يبقى في نفس الملف ويربك الشاشة. صفِّ main إلى الـ println الذي يستخدم twice، وأبقِ دالة واحدة تُرجع. لا تضع twice داخل أقواس main المجعدة. الدوال تجلس داخل الفئة، بجانب main. أغلق أقواس twice قبل أن تنتهي الفئة.
قبل overloading
يمكنك كتابة static int twice(int n)، وإرجاع قيمة محسوبة، وطباعة تلك القيمة من main. تظهر الشاشة العدد الذي استلمه main، لا سطرًا طبعته الدالة بنفسها. void رأس خاطئ عندما تحتاج قيمة راجعة. الصفحة التالية هي overloading، حيث يمكن لأكثر من دالة أن تشارك اسمًا واحدًا عندما تختلف قوائم معاملاتها.
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى