الدوال: كيفية كتابتها
مُقدَّم| English | المعنى |
|---|---|
| accessor/əkˈsesə/ | طريقة الوصول |
| mutator/mjuːˈteɪtə/ | طريقة التعديل |
التحديث المرفوض يترك الحالة السابقة سليمة
- تبدأ الدرجة عند 20. يُخصص setScore(s) فقط عندما s >= 0؛ يترك استدعاء setScore(-5) الدرجة عند 20.
- يمنع الحارس تحديثًا غير صالح. يُعيد getScore() اللاحق الحالة الحالية بدلاً من الحجة المرفوضة.
كتابة دالة
- الطريقة لها رأس وجسم. الرأس:
public void addScore(int s)— الوصول، نوع الإرجاع، الاسم، المعاملات. - الجسم: التعليمات في
{ }التي تقوم بالعمل. يمكن للطريقة قراءة متغيرات الكائن المكونة له وتغييرها.
إرجاع القيم
- نوع الإرجاع لطريقة ما ينص على ما تُعيده؛ استخدم
return value;لإرساله.public int getScore() { return score; }يعيد الدرجة الحالية. - طريقة
voidلا تُرجع شيئاً — بل تقوم بمهامها فقط (مثل الطباعة). يجب أن تكون القيمة المُرجعة قابلة للتعيين لنوع الإرجاع المُعلن؛ فعلى سبيل المثال، يمكن توسيع قيمةintوإرجاعها بواسطة طريقةdouble.
يمكن للمنهج public double result() { return 3; } أن يتم تجميعه حتى وإن كان 3 مقدارًا صحيحًا (int literal).
الصعوبة 1/5 · 100 عملة + مكافأة صغيرة عند الإكمال الأول اليوم
يوسع Java نتيجة الـ int إلى double؛ يجب أن تكون قيم الإرجاع متوافقة، وليس بالضرورة مكتوبة بنفس النوع تمامًا.
الدوال الحاصلة والمعدِّلة
- المُستحصِل (getter) يُرجع معلومات دون تغيير الكائن:
getScore(). المُعدِّل (setter) يُغيّر حالة الكائن:addScore(s)أوsetName(n). - عادةً ما تكون المستحصلات من نوع
int/String؛ والمُعدِّلات عادةً من نوعvoid. معاً، تُشكّلان الواجهة العامة للكائن فوق بياناته الخاصة.
الدالة الحاصلة تُرجع قيمة
بدءًا من الدرجة 20، ترفض setScore(-5) التحديث؛ ويعيد getScore القيمة 20.
دالة تُرجع معلومات دون تغيير الكائن هي...
الصعوبة 1/5 · 100 عملة + مكافأة صغيرة عند الإكمال الأول اليوم
الدوال الحاصلة تقرأ وتُرجع؛ المُعدِّلة تغير الحالة.
دالة void...
الصعوبة 1/5 · 100 عملة + مكافأة صغيرة عند الإكمال الأول اليوم
void = لا قيمة إرجاع؛ تقوم فقط بتنفيذ إجراء.
A non-void method may reach its closing brace and complete normally without returning a value.
الصعوبة 1/5 · 100 عملة + مكافأة صغيرة عند الإكمال الأول اليوم
A path completing normally must return a compatible value. A path that throws an exception is a different case.
أي دالة يمكنها التحقق من مدخلاتها قبل تغيير الحالة؟
الصعوبة 1/5 · 100 عملة + مكافأة صغيرة عند الإكمال الأول اليوم
يمكن للمُعدِّل التحقق (مثلاً رفض السالب) قبل assignments.
كتابة قيمة إرجاع داخل دالة void يترجم بشكل صحيح.
الصعوبة 1/5 · 100 عملة + مكافأة صغيرة عند الإكمال الأول اليوم
لا يمكن للدالة الفارغة إرجاع قيمة — لن يترجم ذلك.
يمكن للطرق التحقق من صحة البيانات
- بما أن الأكواد الخارجية تمر عبر الطرق، يمكن للطريقة أن تتحقق قبل التصرف.
public void setScore(int s) { if (s >= 0) score = s; }ترفض الدرجة السالبة. - يمنع الوصول الخاص الأكواد غير ذات الصلة من تعيين الحقل مباشرة. لا يزال البناء والكل طريقة في الكلاس التي تكتب فيه يجب أن تحافظ على القاعدة المقصودة؛ لا يستطيع المُعدِّل المحمي إصلاح درجة ابتدائية غير صالحة بمفرده.
يجب أن تُرجع الطريقة غيرvoid قيمة متوافقة في كل مسار يكتمل بشكل طبيعي. قد يُرمي المسار بدلاً من ذلك استثناءً. إذا وصلت طريقة int إلى نهايتها دون إرجاع، يفشل التجميع. الطريقة void لا تُرجع شيئاً، لذا فإن return; (أو عدم وجود إرجاع) صحيح هناك؛ كتابة return value; في طريقة void لن تتجمّع.
For the stated guarded setter, what does getScore() return after setScore(-5)?
الصعوبة 2/5 · 140 عملة + مكافأة صغيرة عند الإكمال الأول اليوم
The condition fails, so no assignment occurs and the old score remains 20.
بدءًا من الدرجة 20، دالة replaceScore(30) تحفظ الدرجة القديمة، تعين 30، ثم تُرجع الدرجة القديمة. ما القيمة التي تُرجعها الاستدعاء؟
الصعوبة 2/5 · 140 عملة + مكافأة صغيرة عند الإكمال الأول اليوم
القيمة القديمة المُرجعة هي 20؛ والدرجة الجديدة المخزنة هي 30. لا يمنع إرجاع قيمة حدوث التعديل (Mutation).
الدالة الحاصلة والدالة المعدِّلة:
- الدالة الحاصلة:
public int getScore() { return score; }— تقرأ وتُرجعint. - الدالة المعدِّلة:
public void addScore(int s) { score += s; }— تُغيّر الحالة ولا تُرجع شيئاً. student.addScore(10); int now = student.getScore();
انقل الاستدلال إلى حالة جديدة
- انظر
public int replaceScore(int s) { int old = score; score = s; return old; }. إنه مُعدِّل حتى وإن أرجع قيمة: بدءاً من 20، يُعيد addScore(30) قيمة 20 ويترك الدرجة عند 30. - احكم على السلوك وليس الأسماء أو أنواع الإرجاع. طريقة اسمها getScore تزيد الدرجة ليست مستحصلاً نقياً، وطريقة void تطبع رسالة فقط لا تحتاج بالضرورة لتعديل الكائن.
الـ طريقة لها رأس (الوصول، نوع الإرجاع، الاسم، المعاملات) وجسم. يجب على الطريقة غيرvoid أن return قيمة متوافقة للتعيين في كل مسار يكتمل بشكل طبيعي؛ والطريقة void لا تُرجع شيئاً. المُستحصِلات (getters) تُرجع الحالة دون تغييرها؛ المُعدِّلات (setters) تُغيّر الحالة ويمكنها التحقق من القيمة الجديدة.