שיעורי מודול (2/5)
עבור: הלולאה היחידה
ל-Go יש מבנה לולאה בודדת: for. לא while, לא
do-while, אין foreach (שמגיע בשיעור הבא עם
range). מילת מפתח אחת מכסה את כל המקרים הודות לשלושה צורות.
שלוש הצורות של for
צורה קלאסית של שלושה סעיפים
זהה ל-C/Java:
for i := 0; i < 5; i++ {
fmt.Println(i)
}ל-i יש היקף מוגבל ל-for. שלושת הסעיפים הם אופציונליים (אתה יכול
להשמיט כל אחד מהם) אבל ה-; נשארים אם תשמיט ביניים.
טופס "בזמן": תנאי בלבד
ב-Go, while הוא פשוט for עם ביטוי bool יחיד:
i := 0
for i < 5 {
fmt.Println(i)
i++
}צורה אינסופית
ללא סעיפים, הלולאה לעולם לא תסתיים (אלא אם כן break/return):
for {
if exitCondition() {
break
}
doWork()
}זהו הדפוס לטיפול בלולאות אירועים, שרתים, מדיניות ניסיון חוזר.
break, continue ותוויות
break יוצא מהלולאה הפנימית ביותר, continue מדלג לאיטרציה הבאה:
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue // salta i pari
}
if i > 7 {
break // ferma il ciclo
}
fmt.Println(i) // 1 3 5 7
}כדי לצאת מלולאות מקוננות יש תוויות (נדיר אך שימושי):
Esterno:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i*j == 4 {
break Esterno // esce da entrambi
}
}
}אין אופרטור , כמו ב-C
ב-Go אתה לא יכול לכתוב for i, j := 0, 10; i < j; i, j = i+1, j-1:
ביטוי הפוסט אינו מקבל משימות מרובות. השתמש ב-Go's
תחביר הקצאות מרובות:
for i, j := 0, 10; i < j; i, j = i+1, j-1 {
fmt.Println(i, j)
}זה במקום זאת עובד כי i, j = i+1, j-1 הוא סינגל
הקצאה מרובה.
נסה את זה
הדפס את המספרים מ-0 עד 4 כולל עם שלוש פסקאות קלאסיות עבור.
הצג רמז
`עבור init; cond; פוסט { ... }` - כאן ה-init הוא `i := 0`.
הפתרון זמין לאחר 3 ניסיונות
סכם לסך הכל את כל המספרים מ-1 עד 10 כולל באמצעות הצורה 'בזמן' של for.
הצג רמז
טופס 'while': `for <condition> { ... }`.
הפתרון זמין לאחר 3 ניסיונות
איזו צורה מייצגת לולאה אינסופית ב-Go?
// (a) for i := 0; i < 10; i++ { ... }
// (b) for cond { ... }
// (c) for { ... }לְסַכֵּם
- מילת מפתח אחת
forעם שלוש צורות: קלאסי, בעוד, אינסופי. break/continueאופציונלי עם תווית עבור לולאות מקוננות.- תווית
Name:לפני ה-for, בשימוש במשורה. - אין
,בתור אופרטור: השתמש בהקצאה המרובהi, j = ..., ....