الدرس 5 من 10
الدوال والتحميل الزائد
- 12 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
القيمة المُرجعة ودوال بالاسم نفسه
الشرح
السطر الأول من الدالة يُسمّى توقيعها (signature)، وفيه نوع القيمة التي تُرجعها ثم اسمها ثم نوع كل مُعامِل (parameter)، مثل static int heal(int hp, int amount)، والدالة التي لا تُرجع شيئًا نوعها void. وتُنهي return الدالة فورًا وتُرجع قيمتها، ويرفض المترجم أي دالة قد تنتهي دون return.
أما التحميل الزائد (overloading) فهو أن تكتب عدّة دوال بالاسم نفسه تختلف مُعاملاتها في العدد أو النوع، فيختار المترجم النسخة المناسبة بحسب ما تمرّره، فـ max(3, 9) تستدعي نسخة int، وmax(2.5, 1.5) تستدعي نسخة double. وليس في Java قيم افتراضية للمُعاملات، فيقوم التحميل الزائد مقامها، فالدالة heal(hp) تستدعي heal(hp, 25)، ويبقى المنطق في مكان واحد.
وانتبه إلى أن Java تمرّر إلى الدالة نسخة من القيمة، فتعديل hp داخل الدالة لا يغيّر المتغيّر الأصلي عند من استدعاها، ولذلك إذا كتبت heal(hp, 30); وحدها حُسبت النتيجة ثم ضاعت، فاحفظ ما تُرجعه هكذا: hp = heal(hp, 30);.
المطلوب
أكمل ثلاث نسخ من max، الأولى لعددين صحيحين، والثانية لعددين عشريين، والثالثة لثلاثة أعداد صحيحة تبنيها على نسخة العددين. ثم أكمل heal(hp, amount) لتُرجع الصحة بعد الشفاء دون أن تتجاوز 100، وheal(hp) لتشفي 25 باستدعاء النسخة الأولى، وأخيرًا أصلح main لتطبع الصحة: 100.
الفحوص
6 فحوص- الدالة max تعمل مع عددين صحيحين
- للدالة max نسخة مستقلّة لعددين عشريين
- الدالة max تعمل مع ثلاثة أعداد
- الدالة heal تزيد الصحة ولا تتجاوز 100
- الدالة heal دون مقدار تشفي 25
- طُبع «الصحة: 100»