פרק 4 - לולאת for


סיכום שיעור קצר עם קישורים מדויקים לנקודות בסרטון

השיעור הזה הוא חזרה קצרה ומרוכזת על לולאת for: מתי משתמשים בה, איך קוראים את התחביר שלה, למה מתחילים בדרך כלל מ־0, ומה קורה מאחורי הקלעים בכל סיבוב.

פתחו את הסרטון בפלייליסט

הסיפור של הלולאה

הנקודה הראשונה בשיעור היא שלולאת for נועדה לעשות פעולה חוזרת בלי להעתיק את אותה שורת קוד שוב ושוב. התחביר נראה בהתחלה קצת מאיים, אבל כבר בפתיחה מוצגת הגישה הפשוטה: ב־Visual Studio אפשר לכתוב for ואז Tab Tab, לקבל את התבנית, ולהתמקד במשמעות.

for (int i = 0; i < 5; i++)
{
    Console.WriteLine("The number is " + i);
}

בדוגמה הזאת הלולאה מדפיסה את הערכים 0, 1, 2, 3, 4. כלומר: היא רצה חמש פעמים, אבל הערך האחרון שמודפס הוא 4, כי מתחילים לספור מ־0. זו נקודה שחוזרת בשיעור שוב ושוב, כי היא תכין אותנו בהמשך למערכים.

למה דווקא 0 ו־i < 5

אחת הטעויות הטבעיות לתלמידים היא לכתוב משהו כמו i = 1 יחד עם i <= 5, כי זה “מרגיש” כמו ספירה מ־1 עד 5. בשיעור מוסבר למה עדיף להתרגל לתבנית i = 0; i < count: היא אומרת ישירות כמה חזרות יהיו, והיא מונעת בלבול בהמשך, במיוחד כשמגיעים לאינדקסים של מערכים.

המשמעות היא:

  1. int i = 0 - אתחול, קורה פעם אחת בהתחלה.
  2. i < 5 - תנאי ההמשך של הלולאה.
  3. i++ - עדכון, קורה אחרי גוף הלולאה.

מה באמת קורה בכל סיבוב

החלק המרכזי של השיעור עוצר על הלולאה עם נקודות עצירה. הריצה המדורגת מראה ש־i מתחיל ב־0, התנאי נבדק, גוף הלולאה רץ, ורק אחר כך i++ מגדיל את הערך. אפשר לראות את המהלך הזה בדיבוג של הסיבובים הראשונים: הדפסה, הגדלה, בדיקה מחדש.

בסוף, אחרי שהודפס 4, הערך של i גדל ל־5. עכשיו התנאי i < 5 כבר לא מתקיים, ולכן יוצאים מהלולאה. זה מסביר למה הלולאה רצה חמש פעמים, אבל לא מדפיסה 5.

תחום החיים של i

בדרך כלל כותבים את i בתוך כותרת הלולאה:

for (int i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}

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

אם באמת צריך להשתמש בערך הסופי אחרי הלולאה, אפשר להכריז על i לפני הלולאה:

int i;
for (i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}

Console.WriteLine("final i is " + i); // 5

אבל זו לא ברירת המחדל. אם אין צורך אמיתי בערך אחרי הלולאה, עדיף להשאיר את i בתוך ה־for.

אין שלושה תנאים

התחביר של for נראה כאילו יש בו שלושה דברים שווים, אבל כאן מגיע דיוק חשוב: אין כאן שלושה תנאים.

for (int i = 0; i < 5; i++)

יש:

  • אתחול: int i = 0
  • תנאי אחד: i < 5
  • עדכון: i++

האתחול קורה פעם אחת בלבד. אחרי כל ביצוע של גוף הלולאה לא חוזרים לאתחול, אלא הולכים לעדכון, ואז בודקים שוב את התנאי.

לא לסבך את התנאי בלי סיבה

אפשר טכנית לכתוב תנאים מורכבים בתוך for, למשל עם && או ||, אבל בשיעור מודגש שזה לא המקום להתחיל ממנו. ברגע שמוסיפים עוד משתנים ועוד תנאים, מספר החזרות נעשה פחות ברור. אפשר לראות את הדיון הזה סביב תנאים מורכבים והתקדמות של כמה משתנים.

לכן בשלב הראשון כדאי לשמור על התבנית הפשוטה:

for (int i = 0; i < numberOfTimes; i++)
{
    // הפעולות שרוצות לחזור
}

זה גם הכלל הפדגוגי המרכזי: לולאת for מתאימה במיוחד כאשר מספר החזרות ידוע מראש.

בשביל מה משתמשים בזה

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

דוגמה בסיסית לצובר:

int sum = 0;

for (int i = 1; i <= 10; i++)
{
    sum += i;
}

Console.WriteLine(sum); // 55

זו דוגמה טובה כי היא מראה שהלולאה לא חייבת רק להדפיס; היא יכולה גם לבנות תוצאה בהדרגה.

יציאה מוקדמת עם break

לקראת סוף השיעור נכנסת נקודה חשובה: לפעמים אנחנו מתכננים עד 100 חזרות, אבל רוצים לעצור ברגע שמצאנו משהו. לדוגמה: מחפשים את המספר השלילי הראשון, וברגע שמוצאים אותו אין סיבה להמשיך. כאן נכנסת הפקודה break, שמפסיקה את הלולאה באמצע. ההסבר מתחיל כאן, והדיון על עצירה באמצע ועל כך ש־break הוא כלי תקין ושימושי מופיע בהמשך.

for (int i = 0; i < 100; i++)
{
    int num = int.Parse(Console.ReadLine());

    if (num < 0)
        break;
}

הקו המנחה: לא משתמשים ב־break כדי להסתיר לולאה לא ברורה, אבל כן משתמשים בו כשיש סיבה אמיתית לעצור מוקדם.

סיכום קצר

  • for מתאים כשמספר החזרות ידוע מראש.
  • התבנית המומלצת להתחלה היא for (int i = 0; i < count; i++).
  • i++ קורה אחרי גוף הלולאה, לפני בדיקת התנאי הבאה.
  • אם i הוגדר בתוך ה־for, הוא לא קיים אחרי הלולאה.
  • תנאים מורכבים בתוך for אפשריים, אבל כדאי לדחות אותם עד שהבסיס יציב.
  • break הוא כלי לגיטימי לעצירה מוקדמת כשיש לכך סיבה ברורה.