حلقه ها (Loops)
حلقه ها در Go تکه کد را چندبار اجرا می کنند. «حلقه (Loop)» یعنی تکرار منظمی از اجرای کد. هر دور اجرا را «تکرار (Iteration)» می گوییم. این ابزار برای شمارش، پیمایش لیست ها، و آزمون شرط ها عالی است.
ساختار for در Go
حلقه for تنها حلقه در Go است. سه بخش دارد: مقداردهی، شرط، تغییر شمارنده.
for statement1; statement2; statement3 {
// کد در هر تکرار اجرا می شود
}
مثال 1: چاپ 0 تا 4
اینجا شمارنده از 0 شروع می شود و تا قبل از 5 می رود.
package main
import (
"fmt"
)
func main() {
for i := 0; i < 5; i++ {
fmt.Println(i)
}
}
مثال 2: شمردن ده تا ده تا
شمارنده این بار هر بار 10 واحد زیاد می شود.
package main
import (
"fmt"
)
func main() {
for i := 0; i <= 100; i += 10 {
fmt.Println(i)
}
}
نکته: سه بخش می توانند خالی باشند؛ اما باید منطقشان در کد باشد.
continue: پرش از یک تکرار
دستور continue یعنی این دور را رد کن. سپس تکرار بعدی را ادامه بده.
package main
import (
"fmt"
)
func main() {
for i := 0; i < 5; i++ {
if i == 3 {
continue
}
fmt.Println(i)
}
}
break: توقف حلقه
دستور break اجرای حلقه را همین جا تمام می کند.
package main
import (
"fmt"
)
func main() {
for i := 0; i < 5; i++ {
if i == 3 {
break
}
fmt.Println(i)
}
}
نکته: معمولاً continue و break همراه شرط می آیند.
حلقه های تو در تو
می توانیم داخل یک حلقه، حلقه ای دیگر بگذاریم. حلقه داخلی برای هر تکرار حلقه بیرونی اجرا می شود.
package main
import (
"fmt"
)
func main() {
adj := [2]string{"big", "tasty"}
fruits := [3]string{"apple", "orange", "banana"}
for i := 0; i < len(adj); i++ {
for j := 0; j < len(fruits); j++ {
fmt.Println(adj[i], fruits[j])
}
}
}
range: پیمایش راحت مجموعه ها
range برای پیمایش آرایه، اسلایس یا map عالی است. هم اندیس می دهد، هم مقدار.
for index, value := range arrayOrSliceOrMap {
// کد در هر تکرار اجرا می شود
}
مثال: اندیس و مقدار با range
در این مثال هر دو را چاپ می کنیم: اندیس و مقدار.
package main
import (
"fmt"
)
func main() {
fruits := [3]string{"apple", "orange", "banana"}
for idx, val := range fruits {
fmt.Printf("%v\t%v\n", idx, val)
}
}
فقط مقدار، یا فقط اندیس
با آندرلاین _ یکی را حذف کن. این کار کد را تمیز نگه می دارد.
package main
import (
"fmt"
)
func main() {
fruits := [3]string{"apple", "orange", "banana"}
for _, val := range fruits {
fmt.Printf("%v\n", val)
}
}
package main
import (
"fmt"
)
func main() {
fruits := [3]string{"apple", "orange", "banana"}
for idx, _ := range fruits {
fmt.Printf("%v\n", idx)
}
}
برای تصمیم گیری های چندحالته، صفحه سوئیچ و چندحالت را ببین. همچنین از حلقه ها به عنوان مرجع سریع استفاده کن.
جمع بندی سریع
- در Go فقط حلقه
forداریم. continueیک تکرار را رد می کند.breakحلقه را متوقف می کند.rangeپیمایش را ساده تر می کند.- حلقه های تو در تو ترکیب های مفید می سازند.