→ חזרו אחורה

פרק 6 - מתודות

⏱ 14 דקות קריאה

עד עכשיו כל הקוד שלנו ישב בתוך main אחת גדולה. ברגע שקטע קוד חוזר על עצמו כמה פעמים בתוכנית, או שהתוכנית מתחילה להיות ארוכה ומסובכת, כדאי לפצל אותה לחתיכות קטנות וברורות יותר - זה בדיוק מה שמתודות (Methods) נותנות לנו.

1. מהי מתודה?

מתודה היא קטע קוד עם שם, שאפשר "לקרוא לו" (להריץ אותו) מכל מקום בתוכנית, כמה פעמים שרוצים. במקום להעתיק-להדביק את אותו קוד שוב ושוב, כותבים אותו פעם אחת בתוך מתודה, ופשוט קוראים לה.

שימו לב: גם main היא בעצם מתודה - היא רק מיוחדת, כי Java יודעת להתחיל את ריצת התוכנית ממנה אוטומטית.

2. איך בונים מתודה

כל מתודה בנויה מכמה חלקים קבועים:

Java

static void sayHello() {
    System.out.println("שלום!");
}
            

static - בשלב הזה מספיק לדעת שצריך לכתוב את זה כדי שנוכל לקרוא למתודה ישירות מ-main.

void - אומר שהמתודה לא מחזירה ערך בסיום, היא רק מבצעת פעולה.

sayHello - שם המתודה, שדרכו נקרא לה בהמשך.

() - הסוגריים הריקים אומרים שהמתודה לא מקבלת שום פרמטר.

3. קריאה למתודה

כדי להריץ מתודה, פשוט כותבים את שמה עם סוגריים, בדיוק במקום בקוד שבו נרצה שהיא תרוץ:

Java

public class Main {
    static void sayHello() {
        System.out.println("שלום!");
    }

    public static void main(String[] args) {
        sayHello();
        sayHello();
        System.out.println("סיימנו");
    }
}
            

ההרצה תדפיס "שלום!" פעמיים, ורק אז "סיימנו" - בדיוק לפי סדר הקריאות ב-main.

שימו לב: כל קריאה ל-sayHello() מריצה מחדש את כל הקוד שבתוך המתודה, מהתחלה.

4. פרמטרים: העברת מידע למתודה

לפעמים נרצה שהמתודה תתנהג קצת אחרת בכל קריאה - למשל שתדפיס שם אחר בכל פעם. לשם כך משתמשים בפרמטרים: משתנים שהמתודה מקבלת "מבחוץ".

Java

static void greet(String name) {
    System.out.println("שלום " + name + "!");
}
            

עכשיו כל קריאה יכולה להעביר ערך שונה בתוך הסוגריים:

Java

greet("דנה");
greet("יוסי");
            
שימו לב: אפשר להעביר יותר מפרמטר אחד, מופרדים בפסיקים: greet(String name, int age).

5. החזרת ערך מהמתודה

מתודות לא חייבות רק "לעשות" משהו (כמו להדפיס) - הן יכולות גם לחשב ולהחזיר ערך חדש לקוד שקרא להן. לשם כך, במקום void כותבים את סוג הערך שיוחזר, ומשתמשים בפקודה return.

Java

static int add(int a, int b) {
    return a + b;
}
            

כדי להשתמש בערך שחזר, פשוט משתמשים בקריאה למתודה כאילו היא הערך עצמו - למשל שומרים אותה במשתנה:

Java

int result = add(3, 4);
System.out.println(result);
            

ברגע ש-return רץ, המתודה מפסיקה מיד - כל שורה אחריה בתוך המתודה לא תרוץ.

סוג הערך אחרי return חייב להתאים לסוג שהוצהר ליד שם המתודה (כאן: int).

6. טעויות נפוצות

שכחתם return: מתודה שהוצהרה עם סוג החזרה (למשל int) חייבת להגיע ל-return עם ערך מתאים בכל מסלול אפשרי, אחרת התוכנית לא תתקמפל.

ניסיון להשתמש ב-return בתוך void: מתודת void יכולה להכיל return; ריק כדי לצאת מוקדם, אבל לא return עם ערך.

בלבול בין פרמטר לארגומנט: הפרמטר הוא השם בהגדרת המתודה, הארגומנט הוא הערך שמעבירים בפועל בקריאה.

🎓 זווית הבגרות

איך זה מופיע בבגרות: מתודות הן חלק בלתי נפרד מכל שאלה בחלק ב' של הבגרות - כל מחלקה מכילה מתודות, ולפעמים גם בחלק א' נדרשים לכתוב מתודה עצמאית.

סוג שאלה טיפוסי: כתיבת מתודה שמקבלת פרמטרים (למשל מערך) ומחזירה ערך מחושב, או מעקב אחרי קריאה למתודה קיימת - "מה מחזירה הקריאה...?".

טעות נפוצה: לשכוח שברגע ש-return רץ, המתודה מפסיקה מיד - כל שורה אחריה באותו מסלול לא תרוץ אף פעם.

מה לזכור למבחן: בדקו שכל מסלול אפשרי בתוך מתודה עם ערך החזרה מגיע בסוף ל-return מתאים - כולל כל ענפי ה-if/else.

7. תרגול

מה יודפס למסך על ידי הקוד הבא?

Java
static int mystery(int a, int b) {
    if (a > b) {
        return a;
    }
    return b;
}

public static void main(String[] args) {
    System.out.println(mystery(4, 9));
}

הקוד הבא קורא לאותה מתודה כמה פעמים עם ארגומנטים שונים - מה יודפס למסך?

Java
static int square(int n) {
    return n * n;
}

public static void main(String[] args) {
    int total = 0;
    total += square(2);
    total += square(3);
    total += square(4);
    System.out.println(total);
}

כתבו את הכותרת (החתימה) של מתודת static בשם printLine שלא מקבלת פרמטרים ולא מחזירה ערך.

כתבו שורת קוד שקוראת למתודה greet עם הפרמטר "נועה".

כתבו את הכותרת של מתודת static בשם square שמקבלת int בשם n ומחזירה int.

בתוך המתודה square, כתבו את שורת ה-return שמחזירה את n בחזקת 2.

פרק 5 - מערכים פרק 7 - מחרוזות