דלג לתוכן הראשי

לולאת חזרה

הקדמה

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

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

בחלק זה מוסבר אופן השימוש בלולאות while ו-for, וכן בשימוש במילות המפתח break ו-continue לשליטה בזרם החזרה.


לולאת while

לולאת while מריצה קוד בבלוק כל עוד התנאי שניתן נחשב כ-true. כאשר התנאי הופך ל-false, החזרה נפסקת מייד.

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

מבנה בסיסי

ב-Wave, המבנה הבסיסי של לולאת while הוא כדלקמן.

while (תנאי) {
// קוד לביצוע חוזר
}

התנאי חייב להיות מוערך לטיפוס bool ובבלוק הקוד המוקף בסוגריים מסולסלים {} אפשר לכתוב משפט אחד או יותר.

דוגמה: הדפסה מ-0 עד 4

var i :i32 = 0;

while (i < 5) {
println("i הוא {}.", i);
i = i + 1;
}

בדוגמה זו, החזרה מבוצעת כל עוד המשתנה i קטן מ-5. בכל מחזור חזרה, הערך הנוכחי מודפס וערך i מוגדל ב-1, עד שהתנאי בסופו של דבר הופך ל-שקר.


לולאת for

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

כל הרכיבים הדרושים לשליטה בחזרה ממוקמים במקום אחד ולכן קל לעקוב אחרי מבנה החזרה.

מבנה בסיסי

for (אתחול; תנאי; שינוי) {
// קוד לחזרה
}

ב-Wave, אתחול לולאת for תומך בצורות רבות.

  • אתחול טיפוס var מרומז
  • אִתחוּל הכרזות var / let mut / const
  • אִתחוּל ביטויים כלליים (שימוש חוזר במשתנים קיימים)

דוגמה 1: אִתחוּל סוג משתנה באופן משתמע

for (i :i32 = 1; i <= 5; i += 1) {
println("i = {}", i);
}

דוגמה 2: אִתחוּל var / let mut

for (var i: i32 = 0; i < 3; i += 1) {
println("var i = {}", i);
}

for (let mut j: i32 = 0; j < 3; j += 1) {
println("let mut j = {}", j);
}

דוגמה 3: אִתחוּל מבוסס ביטוי (שימוש חוזר במשתנים קיימים)

var i: i32 = 99;

for (i = 3; i <= 5; i += 1) {
println("i = {}", i);
}

println("after loop: {}", i); // 6

אִתחוּל באמצעות הכרזות (var, let mut, i :i32 = ...) פועלות כמשתני לולאה סְקוֹפוֹת, ואִתחוּל מבוסס ביטוי (i = ...) מעדכן את המשתנה החיצוני ישירות.


לולאות מקוננות

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

דוגמה: לולאת while מקוננת

var i :i32 = 0;

while (i < 3) {
var j :i32 = 0;

while (j < 2) {
println("i={}, j={}", i, j);
j = j + 1;
}

i = i + 1;
}

בדוגמה זו, בכל פעם שהלולאת while החיצונית מבוצעת, לולאת ה-while הפנימית מבוצעת במלואה. באמצעות זה ניתן לעבד שילובים בצורה (i, j) ברצף.


פקודת break

פקודת break מסיימת את הלולאה ומעבירה את הזרימה מחוץ ללולאה באופן מיידי. הפקודה משמשת כאשר אין צורך להמשיך בלולאה במהלך חוזר מסוים.

דוגמה: סיום לולאה בערך מסוים

var i :i32 = 0;

while (true) {
if (i == 5) {
break;
}

println(i);
i = i + 1;
}

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


פקודת continue

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

דוגמה: הדפסת מספרים זוגיים בלבד

for (var i: i32 = 0; i <= 10; i = i + 1) {
if (i % 2 == 1) {
continue;
}

println(i);
}

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


סיכום

הלולאות ב-Wave עוצבו כך שיוכלו להביע חזרות מבוססות תנאי ומבוססות מספר בצורה טבעית. לולאת while מתאימה לחזרות המבוססות על תנאים, ולולאת for מועילה כאשר מספר החזרות והזרם ברורים.

שימוש משולב ב-break ו-continue מאפשר שליטה מדויקת בזרימה במהלך תהליך החזרה, כך שניתן לבנות לוגיקה מחזורית מתוחכמת וגמישה יותר.