Lecții din modul (2/5)
pentru: singura buclă
Go are o singură construcție buclă: for. Nu while, nu
do-while, nu foreach (care vine în lecția următoare cu
range). Un singur cuvânt cheie acoperă toate cazurile datorită a trei forme.
Cele trei forme de for
Forma clasică cu trei clauze
Identic cu C/Java:
for i := 0; i < 5; i++ {
fmt.Println(i)
}i are un domeniu de aplicare limitat la for. Cele trei clauze sunt opționale (puteți
omiteți oricare dintre ele), dar ; rămân dacă omiteți unul intermediar.
forma „în timp ce”: numai condiție
În Go, while este pur și simplu un for cu o singură expresie bool:
i := 0
for i < 5 {
fmt.Println(i)
i++
}Forma infinită
Fără clauze, bucla nu se termină niciodată (cu excepția cazului în care break/return):
for {
if exitCondition() {
break
}
doWork()
}Este modelul pentru bucle de gestionare a evenimentelor, servere, politici de reîncercare.
break, continue și etichete
break iese din bucla cea mai interioară, continue trece la următoarea iterație:
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
}Pentru a ieși din buclele imbricate există etichete (rar, dar utile):
Esterno:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i*j == 4 {
break Esterno // esce da entrambi
}
}
}Niciun operator , ca în C
În Go nu poți scrie for i, j := 0, 10; i < j; i, j = i+1, j-1:
expresia post nu acceptă sarcini multiple. Folosește Go's
sintaxa de atribuire multiplă:
for i, j := 0, 10; i < j; i, j = i+1, j-1 {
fmt.Println(i, j)
}În schimb, aceasta funcționează deoarece i, j = i+1, j-1 este single
atribuire multiplă.
Încearcă
Tipăriți numerele de la 0 la 4 inclusiv cu un clasic cu trei clauze pentru.
Afișează indiciu
`pentru init; cond; post { ... }` — aici init este `i := 0`.
Soluție disponibilă după 3 încercări
Însumați în total toate numerele de la 1 la 10 inclusiv folosind forma „în timp” a lui for.
Afișează indiciu
„în timp ce” formă: „pentru <condiție> { ... }`.
Soluție disponibilă după 3 încercări
Care formă reprezintă o buclă infinită în Go?
// (a) for i := 0; i < 10; i++ { ... }
// (b) for cond { ... }
// (c) for { ... }Recapitulare
- Un singur cuvânt cheie
forcu trei forme: clasic, while, infinit. break/continueopțional cu o etichetă pentru bucle imbricate.- Eticheta
Name:înainte defor, folosită cu moderație. - Nu
,ca operator: utilizați atribuirea multiplăi, j = ..., ....