מטודות: איך לכתוב אותן
הוצג| English | משמעות |
|---|---|
| accessor/əkˈsesə/ | גישה למשתנים |
| mutator/mjuːˈteɪtə/ | שינוי משתנים |
עדכון המrejected משאיר את המצב הקודם intact
- ציון מתחיל ב-20. setScore(s) מ asignes רק כאשר s >= 0; הקריאה setScore(-5) משאירה את הציון ב-20.
- המשמר מונע עדכון לא תקין. getScore() מאוחר יותר מחזירה את המצק הקיים ולא את הארגומנט המ-rejected.
כתיבת מטרה
- ל-מתודה יש ראש ו-גוף. ראש:
public void addScore(int s)— גישה, סוג החזרה, שם, פרמטרים. - גוף: הביונים ב
{ }שמבצעים את העבודה. המטודה יכולה לקרוא ולשנות משתני מופע של האובייקט.
ערכי חזרה
- סוג ההחזרה של מטודה קובע מה היא מחזירה; השתמש ב
return value;כדי לשלוח אותו.public int getScore() { return score; }מחזירה את הנקודות הנוכחיות. - מטודה
voidמחזירה כלום — היא פשוט מבצעת את תפקידה (למשל הדפסה). הערך שהוחזר חייב להיות תואם להצהרת סוג ההחזרה; לדוגמה, ערךintיכול להתרחב ולהוחזר על ידי מטודהdouble.
המתודה public double result() { return 3; } יכולה להתקפל גם אם 3 הוא ליטרל int.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Java מרחיבה את תוצאת int ל-double; ערכי ההחזרה חייבות להיות תואמות, ולא בהכרח כתובות עם סוג זהה.
מקבלים ומעבירים
- משיק (Getter) מחזיר מידע ללא שינוי באובייקט:
getScore(). מתאפיין (Setter) משנה את מצב האובייקט:addScore(s)אוsetName(n). - משיקים הם בדרך כלל מחזירי
int/String; מתאפיינים הם בדרך כללvoid. יחד הם יוצרים את הממשק הציבורי של האובייקט עבור נתוניו הפרטיים.
גישה מחזירה ערך
בהתחלה עם score 20, setScore(-5) דוחה עדכון זה; getScore מחזירה 20.
שיטה שמחזירה מידע ללא שינוי באובייקט היא...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
אקססורים קוראים ומחזירים; מוטטורים משנים מצב.
שיטה void...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
void = אין ערך חזרה; היא פשוט מבצעת פעולה.
A non-void method may reach its closing brace and complete normally without returning a value.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
A path completing normally must return a compatible value. A path that throws an exception is a different case.
איזה שיטה יכולה לאמת את הקלט שלה לפני שינוי המצב?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
סטטר יכול לבדוק (למשל, לדחות שליליים) לפני ההקצה.
כתיבת ערך חזרה בתוך שיטה void מתקבלת ב-outline compilation.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
שיטה void לא יכולה להחזיר ערך — זה לא יתקבל בקומפילציה.
שיטות יכולות לבצע אימות
- מכיוון שקוד חיצוני עובר דרך מטודות, מטודה יכולה לבצע בדיקה לפני שפעול.
public void setScore(int s) { if (s >= 0) score = s; }דוחה נקודות שליליות. - גישה פרטית מונעת מקוד זר להקליד ישירות בשדה. בוני הקלאס ומטודות הקלאס כולם הכותבים בו חייבים עדיין לשמר את הכלל הרצוי; המתאפיין המגן אינו מסוגם לתקן נקודת התחלה לא תקנית לבדו.
מטודה שאינה void חייבת להחזיר ערך תואם בכל מסלול שמסתיים בצורה תקינה. מסלול יכול במקום זאת להשליך חריגה. אם מטודה int מגיעה לסופה ללא החזרת ערך, ההרכבה נכשלת. מטודה void מחזירה כלום, ולכן return; (או ללא return) הוא נכון שם; כתיבת return value; במטודה void לא תורכב.
For the stated guarded setter, what does getScore() return after setScore(-5)?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
The condition fails, so no assignment occurs and the old score remains 20.
בהתחלה עם score 20, replaceScore(30) שומר את ה-score הישן, מקצה 30, ואז מחזיר את ה-score הישן. מהו הערך שהקריאה מחזירה?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
ה-score הישן המוחזר הוא 20; ה-score הארוחש החדש הוא 30. החזרת ערך אינה מונעת שינוי.
אקססור ומייוטור:
- אקססור:
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, calling replaceScore(30) מחזירה 20 ושאירה את הנקודות ב30. - שפט התנהגות ולא שמות או סוגי החזרה. מטודה שנקראת getScore ועולה את הנקודות אינה משיק טהור, ומטודה void שהפכה להדפיס הודעה אינה חייבת לשנות את האובייקט.
למטודה יש Header (גישה, סוג החזרה, שם, פרמטרים) ו-Body. מטודה שאינה void חייבת return ערך תואם בכל מסלול שמסתיים בצורה תקינה; מטודה void מחזירה כלום. משיקים (Getters) מחזירים מצב ללא שינוי; מתאפיינים (Setters) משנים מצב ויכולים לבדוק את הערך החדש.