الانتقال إلى المحتوى الرئيسي
الوحدة 2 · الدرس 3 من 58/50 في الدورة~10 min
دروس الوحدة (3/5)

ل... المدى

for ... range هي الطريقة الاصطلاحية للتكرار على المجموعات: الشرائح والمصفوفات والخرائط والسلاسل والقنوات. يتغير بناء الجملة قليلا اعتمادًا على المجموعة، لكن النمط الأساسي هو نفسه دائمًا: محمي_INLINE_5.

تتراوح على شرائح ومصفوفات

إرجاع الفهرس و نسخة من القيمة:

Go
nums := []int{10, 20, 30}
for i, v := range nums {
    fmt.Println(i, v)
}
// 0 10
// 1 20
// 2 30

في كثير من الأحيان يكون أحد الأمرين كافيا:

Go
// solo indice
for i := range nums { _ = i }

// solo valore (ignora indice con _)
for _, v := range nums { _ = v }

نطاق على الخريطة

إرجاع المفتاح و القيمة:

Go
prices := map[string]int{"pane": 2, "latte": 3, "vino": 8}
for k, v := range prices {
    fmt.Println(k, v)
}

النطاق على سلسلة: الأحرف الرونية، وليس البايتات

for i, r := range s يتم التكرار لكل نقطة رمز Unicode (رون)، وليس لكل بايت. الفهرس i هو إزاحة البايت لبداية الرون.

Go
for i, r := range "èé" {
    fmt.Printf("%d %c (%U)\n", i, r, r)
}
// 0 è (U+00E8)
// 2 é (U+00E9)

للتكرار لكل بايت، استخدم الفهرسة الكلاسيكية:

Go
s := "ciao"
for i := 0; i < len(s); i++ {
    fmt.Println(s[i])  // byte (uint8)
}

النطاق على القناة

يتكرر حتى يتم إغلاق القناة:

Go
ch := make(chan int)
go func() {
    for i := 0; i < 3; i++ { ch <- i }
    close(ch)
}()
for v := range ch {
    fmt.Println(v)
}

سوف نتعمق أكثر في وحدة التزامن.

جربه

تمرين#go.m2.l3.e1
المحاولات: 0جارٍ التحميل…

اطبع فهرس وقيمة كل عنصر من الأعداد باستخدام for-range.

جارٍ تحميل المحرر…

الحل متاح بعد 3 من المحاولات

تمرين#go.m2.l3.e2
المحاولات: 0جارٍ التحميل…

اجمع إجمالي جميع قيم الأعداد متجاهلاً الفهرس.

جارٍ تحميل المحرر…
إظهار التلميح

استخدم `_` لتجاهل الفهرس.

الحل متاح بعد 3 من المحاولات

Quiz#go.m2.l3.e3
جاهز

ماذا يمثل المتغير الأول في `for k, v := range m` عندما تكون m خريطة؟

Go
m := map[string]int{"a": 1, "b": 2}
for k, v := range m { fmt.Println(k, v) }
خيارات الإجابة

خلاصة

  • for k, v := range coll بنطاق واضح: تجاهل باستخدام _ ما لا تستخدمه.
  • الشريحة/المصفوفة: فهرس + نسخة من القيمة. للتحول، مؤشر.
  • الخريطة: مفتاح + قيمة، ترتيب عشوائي في كل جولة.
  • السلسلة: يتكرر النطاق لكل رونية (نقطة الكود)، وليس لكل بايت.
  • القناة: تتكرر عندما تكون القناة مفتوحة؛ مغلق بـ close().