GO

GO — حلقه ها (Loops)

آخرین بروزرسانی: 1404/08/14

حلقه ها (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 پیمایش را ساده تر می کند.
  • حلقه های تو در تو ترکیب های مفید می سازند.