Darsliklar Go Lang For Tsikl

Go Lang Go Lang For Tsikl

For tsikl — Go’da takrorlash uchun ishlatiladigan yagona sikl konstruksiyasi. Boshqa tillardagi while, do-while — Go’da alohida kalit so’z sifatida yo’q, ularning barchasi bitta forning turli shakllari orqali ifodalanadi.

forGo’ning yagona sikl kalit so’zi. U to’rt xil shaklda yozilishi mumkin: to’liq uch qismli, faqat shart bilan (while o’rnida), shartsiz (cheksiz) va range bilan.

To’liq uch qismli shakl

Klassik C uslubidagi sikl: boshlang’ich qiymat, shart va har aylanishdan keyingi amal — barchasi bitta qatorda, nuqta-vergul bilan ajratilgan:

package main

import "fmt"

func main() {
    for i := 1; i <= 5; i++ {
        fmt.Println(i)
    }
}
1
2
3
4
5

i := 1 — bir marta bajariladi, i <= 5 — har aylanishdan oldin tekshiriladi, i++ — har aylanishdan keyin ishlaydi. Uchala qism ham, boshqa C-oilasidagi tillardan farqli, qavssiz yoziladi.

Faqat shart bilan — while o’rniga

Ikkinchi va uchinchi qismni tashlab, faqat shartni qoldirsak, for xuddi boshqa tillardagi while kabi ishlaydi:

package main

import "fmt"

func main() {
    son := 1
    for son <= 100 {
        son *= 2
    }
    fmt.Println(son)
}
128

for son <= 100son 100’dan oshguncha ikkilantiraveradi. Go’da alohida while kalit so’zi yo’qligi sababi shu: forning o’zi bu vazifani to’liq bajaradi.

Shartsiz — cheksiz sikl

Hech qanday shartsiz yozilgan for cheksiz ishlaydi — undan chiqish uchun break shart:

package main

import "fmt"

func main() {
    hisoblagich := 0
    for {
        hisoblagich++
        if hisoblagich == 3 {
            break
        }
    }
    fmt.Println(hisoblagich)
}
3

for { — hech qanday to’xtash shartisiz boshlandi. hisoblagich == 3 bo’lganda if ichidagi break sikldan chiqardi. Bu shakl, masalan, tashqi hodisani (server so’rovi, foydalanuvchi kiritishi) kutadigan dasturlarda ishlatiladi.

for…range — to’plam bo’ylab yurish

Massiv, Slice, Map va satr bo’ylab yurish uchun range ishlatiladi — u har aylanishda indeks va qiymatni birga qaytaradi:

package main

import "fmt"

func main() {
    for indeks, harf := range "salom" {
        fmt.Println(indeks, harf, string(harf))
    }
}
0 115 s
1 97 a
2 108 l
3 111 o
4 109 m

Satr bo’ylab range yurganda ikkinchi qiymat — rune (ma’lumot turlari darsida ko’rgan Unicode belgi kodi). harf — sonli kod (115's'ning kodi), string(harf) esa uni o’qiladigan belgiga qaytaradi. Faqat indeks yoki faqat qiymat kerak bo’lsa, ishlatilmagan tomon _ bilan almashtiriladi: for _, harf := range "salom".