1. مرور کلی بر اظهارات حلقه
در زبان Go، اظهارات حلقه به ما اجازه میدهند که یک بلوک کد را چندین بار اجرا کنیم. وقتی نیاز به انجام مکرر عملیاتهای خاص دارید، اظهارات حلقه بسیار مفید میشوند. به عنوان مثال ممکن است بخواهید از روی هر عنصر در یک آرایه بگذرید یا یک عملیات را تا رسیدن به یک شرط خاص تکرار کنید. در Go، اظهارات حلقه اصلی به کمک کلمه کلیدی for
پیادهسازی میشوند که تنها اظهارات حلقه در زبان Go هستند. استفاده صحیح از اظهارات حلقه برای نوشتن کدی کارآمد و قابل نگهداری بسیار حیاتی است.
2. مبانی حلقه for
2.1 ساختار حلقه for
حلقه for
در زبان Go از سه بخش تشکیل شده است:
- اظهارات مقدماتی: قبل از اولین تکرار اجرا میشود و معمولاً برای اعلام یک شمارنده حلقه استفاده میشود.
-
عبارت شرطی: قبل از هر تکرار ارزیابی میشود. اگر شرط
true
باشد، بدنه حلقه اجرا میشود. - اظهارات پس از: بعد از بلوک کد هر تکرار اجرا میشود و معمولاً برای بروزرسانی شمارنده حلقه استفاده میشود.
دستور for
به صورت زیر است:
for اظهارات مقدماتی; عبارت شرطی; اظهارات پس از {
// کد بدنه حلقه
}
2.2 مثال ساده حلقه for
بیایید از طریق مثال سادهای فرآیند اجرای حلقه for
را درک کنیم:
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
fmt.Println("مقدار i:", i)
}
}
در این مثال، متغیر i
به مقدار 0
مقدماتیسازی میشود. حلقه for
شرط i < 5
را بررسی میکند. اگر شرط درست باشد، بدنه حلقه اجرا میشود و مقدار i
چاپ میشود. بعد از اجرای بدنه حلقه، مقدار i
توسط i++
(عملیات افزایش) بروزرسانی میشود و سپس حلقه شرط را مجدداً بررسی میکند تا مقدار i
به 5
برسد که در آن زمان شرط غلط میشود و حلقه for
پایان مییابد.
2.3 سایر مثالهای حلقه for
2.3.1 حلقه بیپایان
در Go، میتوانید اظهارات مقدماتی، عبارت شرطی و اظهارات پس از حلقه for
را حذف کنید تا یک حلقه بیپایان ایجاد کنید که تا زمانی که توسط یک بیانیه break
یا مقدار بازگشتی از یک تابع متوقف شود، ادامه خواهد یافت.
for {
// کد درون یک حلقه بیپایان
if شرطی_خاص {
break // خروج از حلقه زمانی که یک شرط خاص برآورده شود
}
}
2.3.2 حلقه فقط با شرط
در Go، میتوانید از یک حلقه for
با شرطی تنها استفاده کنید که مشابه یک حلقه while
در زبانهای برنامهنویسی دیگر است.
n := 0
for n < 5 {
fmt.Println(n)
n++
}
کد فوق 0
تا 4
را چاپ میکند و حلقه زمانی که n
به 5
برسد خاتمه مییابد.
2.3.3 گذر از یک آرایه یا برش با حلقه
در Go، کلمه کلیدی range
برای سادهتر کردن گذر از هر عنصر یک آرایه یا برش استفاده میشود.
items := []int{1, 2, 3, 4, 5}
for index, value := range items {
fmt.Printf("اندیس: %d, مقدار: %d\n", index, value)
}
کد فوق اندیس و مقدار هر عنصر را چاپ میکند. اگر فقط از مقدار عناصر نیاز دارید، میتوانید از _
برای نادیدهگرفتن اندیس استفاده کنید.
for _, value := range items {
fmt.Printf("مقدار: %d\n", value)
}
توجه: استفاده از آرایهها در فصول بعدی به تفصیل توضیح داده خواهد شد. اگر این بخش را درک نکردید اشکالی ندارد تا زمانی که بفهمید که حلقه
for
میتواند به این شکل استفاده شود.
2.3.4 حلقه زدن از طریق نقشهها
در هنگام گردش در یک نقشه، ترکیب حلقه for
و عبارت range
بسیار قدرتمند است. این به شما امکان میدهد تا هر جفت کلید-مقدار نقشه را بگیرید.
colors := map[string]string{"red": "#ff000", "green": "#00ff00", "blue": "#000ff"}
for key, value := range colors {
fmt.Printf("کلید: %s، مقدار: %s\n", key, value)
}
در این مثال، تمام کلیدها و مقادیر متناظر آنها در نقشه colors
را چاپ میکنیم. مشابه حلقه زدن از آرایهها، اگر فقط به کلید یا مقدار نیاز دارید، میتوانید از نادیده گرفتن دیگری انتخاب کنید.
توجه: استفاده از نقشهها در فصول بعدی به طور دقیق توضیح داده خواهد شد. اگر این بخش را درک نمیکنید، این مشکل نیست تا جایی که میفهمید که حلقه
for
میتواند به این صورت استفاده شود.
3 کنترل جریان حلقهها
3.1 استفاده از break
برای پایان دادن به یک حلقه
گاهی اوقات نیاز است که هنگام برقرار شدن یک شرط خاص، به صورت زودهنگام از حلقه خارج شویم، و در چنین مواردی، میتوان از دستور break
استفاده کرد. در زیر یک مثال از استفاده از break
برای خروج از یک حلقه آمده است:
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i == 5 {
break // زمانی که i برابر 5 باشد، حلقه را خروجی میدهیم
}
fmt.Println("مقدار i:", i)
}
// خروجی فقط شامل مقادیر از 0 تا 4 خواهد بود
}
3.2 استفاده از continue
برای رد کردن ایتریشنها
در مواقع خاصی، ممکن است بخواهیم ایتریشن فعلی را رد کرده و با ایتریشن بعدی ادامه دهیم. این کار را میتوان با استفاده از دستور continue
انجام داد. در ادامه یک مثال آورده شده است:
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
if i%2 != 0 {
continue // اگر i فرد باشد، این ایتریشن را رد کن
}
fmt.Println("عدد زوج:", i)
}
}