לולאת for היא הלולאה השכיחה והפופולארית ביותר בשימוש.
for היא מילה שמורה בשפת #C.
נשתמש בלולאת for בכל פעם שנצטרך לחזור על פקודה או סדרת פקודות מספר ידוע מראש של פעמים.
לולאת for היא הלולאה השכיחה והפופולארית ביותר בשימוש. for היא מילה שמורה בשפת #C.
נשתמש בלולאת for בכל פעם שנצטרך לחזור על פקודה או סדרת פקודות מספר ידוע מראש של פעמים. לדוגמה: צייר 1000 עיגולים, קלוט 250 מספרים.
לולאת for מורכבת משני חלקים: כותרת הלולאה וגוף ההודעה.
כותרת
for (int i = 0; i < 20; i++) {
Console.Write("*");
}
הכותרת מתחילה בפקודה for, בכותרת נגדיר ונבדוק את מספר החזרות שיתבצעו, הכותרת מורכבת משלושה מקטעים:
1.המקטע הראשון הוא מקטע האתחול של הלולאה, הוא נקרא "Initializer" והוא מתבצע פעם אחת בלבד, בכניסה הראשונה ללולאה.
בתוכנית הדוגמה מוגדר במקטע הראשון משתנה בשם i אשר מאותחל ב- 0.
משתנה זה נהרס ויוצא מטווח ההכרה (scope) כאשר הלולאה מסתיימת .
במקטע האתחול ניתן להשתמש במשתנה שהוגדר ואף אותחל קודם לכן, לדוגמה:
int i = 0;
for (I; i<20; i++)
{ {
במקרה זה טווח ההכרה של המשתנה i הוא מעבר לאורך החיים (life time) של הלולאה.
2. המקטע השני של הכותרת נקרא "boolean expression" או "condition" והוא מגדיר ביטוי בוליאני שייבדק כתנאי להמשך ביצוע הלולאה. הביטוי בוליאני יכול להיות פשוט או פשוט או מורכב. התנאי נבדק החל מהאיטראציה הראשונה, כל עוד ערכו של הביטוי true הלולאה תמשיך להתקיים.
יתכן מצב שבו הלולאה לא תתבצע ולו פעם אחת.
בדוגמה, כך עוד ערכו של i קטן מ-20 הלולאה תמשיך.
3. המקטע השלישי מכונה "update" או "step". במקטע זה מתעדכן ערכו של המשתנה i, על מנת שהלולאה תוכל תסתיים.
אם ערכו של i לא ישתנה הלולאה לעולם לא תסתיים משום שהתוצאה של המקטע השני לעולם יהיה true.
שימו לב שהתו ';' מפריד בין המקטעים של כותרת הלולאה.
גוף הלולאה
for (int i = 0; i < 20; i++) {
Console.Write("*");
}
בגוף ההודעה נכתוב את סדרת הפקודות שיבוצעו בכל חזרה.
כמו בפקודה if כך גם בלולאות for הסוגריים המסולסלות המגדירות את גוף הלולאה והן הכרחיות רק כאשר נרצה לבצע מספר פקודות בכל איטראציה, הן מכונות "בלוק".
המלצה, הקוד הרבה יותר קריא כאשר משתמשים תמיד בסוגריים מסולסלים.
ניתן לכתוב לולאות שבהן מקטינים את ערכו של המשתנה הנבדק,
לדוגמה (ForSample02):
1 : classProgram
2 : {
3 : staticvoidMain(string[]args)
4 : {
5 : for(inti=20;i>0;i--)
6 : {
7 : Console.WriteLine(i);
8 : }
9 : }
10 : }
פלט:
במקרה זה ערכו ההתחלתי של i הוא 20 (שורה XXX), בכל איטראציה מופחת 1 מערכו של i.
כל עוד ערכו של i גדול מ- 0 הלולאה תמשיך להתקיים ותבצע איטראציה נוספת.
לא חייבים לשנות את ערכו של המשתנה i ב-1, ניתן לשנותו בכל ערך אחר, לדוגמה (ForSample03):
1 : classProgram
2 : {
3 : staticvoidMain(string[]args)
4 : {
5 : for(inti=0;i<100;i+=12)
6 : {
7 : Console.WriteLine(i);
8 : }
9 : }
10 : }
פלט:
כל שלושת המקטעים של כותרת הלולאה הינם אופציונאליים,
הלולאה הנ"ל היא חוקית:
היא חוקית אולם בעייתית משום שמדובר למעשה בלולאה אין סופית.
ממה צריך להיזהר, שימו לב לקוד הבא:
1 : class Program
2 : {
3 : staticvoid Main(string[] args)
4 : {
5 : for (int i = 0; i < 20; i--)
6 : {
7 : Console.Write("*");
8 : }
9 : Console.WriteLine();
10 : }
11 : }
מה הבעיה איתו?
במקום לקדם את i בכל איטראציה, מחסירים ממנו 1, תיאורטית הלולאה לא תסתיים לעולם כי תמיד i יהיה קטן מ-20 (מעשית מתי שהוא הלולאה תסתיים אבל היא לבטח לא תעשה מה שציפינו שהיא תעשה).