Go / for давталт

for давталт

Давталт гэдэг нь нэг кодыг олон удаа ажиллуулах хэрэгсэл. Go-д давталтын цорын ганц түлхүүр үг бол forwhile, do/while гэж байхгүй. Гэхдээ for нь маш уян хатан бөгөөд бусад хэлнүүдийн бүх давталтын хэлбэрийг орлодог.

Классик for давталт

go
package main

import "fmt"

func main() {
    // init; нөхцөл; дараах үйлдэл
    for i := 0; i < 5; i++ {
        fmt.Println("Давталт:", i)
    }
}

Гаралт:

код
Давталт: 0
Давталт: 1
Давталт: 2
Давталт: 3
Давталт: 4

Гурван хэсгийн утга:

  • i := 0 — эхлэх утга (нэг удаа ажиллана)
  • i < 5 — үргэлжлэх нөхцөл (давталт болгонд шалгана)
  • i++ — давталт бүрийн төгсгөлд хийх үйлдэл

Нөхцөл false болмогц давталт дуусна.

Нийлбэр, үржвэр тооцоолох

go
package main

import "fmt"

func main() {
    sum := 0
    for i := 1; i <= 100; i++ {
        sum += i
    }
    fmt.Println("1-ээс 100 хүртэлх нийлбэр:", sum)

    product := 1
    for i := 1; i <= 5; i++ {
        product *= i
    }
    fmt.Println("5! (факториал):", product)
}

Гаралт:

код
1-ээс 100 хүртэлх нийлбэр: 5050
5! (факториал): 120

while хэлбэрийн for

Зөвхөн нөхцөл бичвэл while-тай яг адил ажилладаг:

go
package main

import "fmt"

func main() {
    n := 1

    for n < 100 {
        n *= 2
        fmt.Println(n)
    }

    fmt.Println("Давталт дууссан. Эцсийн утга:", n)
}

Гаралт:

код
2
4
8
16
32
64
128
Давталт дууссан. Эцсийн утга: 128

n 128 болоход n < 100 нөхцөл false болж давталт зогсдог.

Хязгааргүй давталт ба break

for дангаараа бичвэл хязгааргүй давтана. break ашиглан давталтаас гарна:

go
package main

import "fmt"

func main() {
    count := 0

    for {
        count++
        fmt.Println("count =", count)

        if count >= 3 {
            fmt.Println("3 хүрлээ, зогсоно.")
            break
        }
    }

    fmt.Println("Давталтаас гарлаа.")
}

Гаралт:

код
count = 1
count = 2
count = 3
3 хүрлээ, зогсоно.
Давталтаас гарлаа.

Хязгааргүй давталтыг server, background process, тасралтгүй оролт хүлээн авах зэрэгт ашиглана.

continue — давталтыг алгасах

continue нь тухайн давталтын үлдсэн кодыг алгасаж, дараагийн давталтад шилждэг:

go
package main

import "fmt"

func main() {
    // Зөвхөн сондгой тоонуудыг хэвлэх
    for i := 1; i <= 10; i++ {
        if i%2 == 0 {
            continue  // сондгой бол алгасна
        }
        fmt.Println(i)
    }
}

Гаралт:

код
1
3
5
7
9

i % 2 == 0 буюу i тэгш тоо бол continue ажиллаж тухайн давталтыг алгасна.

range — slice, map давтах

range нь slice, map, string зэрэг өгөгдлийн бүлгийг давтахад хэрэглэнэ:

go
package main

import "fmt"

func main() {
    // Slice давтах
    fruits := []string{"Алим", "Гүзээлзгэнэ", "Зурхай", "Тоор"}

    for i, fruit := range fruits {
        fmt.Printf("%d: %s\n", i, fruit)
    }

    fmt.Println("---")

    // Index хэрэггүй бол _ ашиглана
    for _, fruit := range fruits {
        fmt.Println(fruit)
    }

    fmt.Println("---")

    // String давтах — rune (Unicode тэмдэгт) өгнө
    for i, ch := range "Go!" {
        fmt.Printf("index %d: %c\n", i, ch)
    }
}

Гаралт:

код
0: Алим
1: Гүзээлзгэнэ
2: Зурхай
3: Тоор
---
Алим
Гүзээлзгэнэ
Зурхай
Тоор
---
index 0: G
index 1: o
index 2: !

range нь index ба утга хоёуланг нь өгдөг. Аль нэгийг ашиглахгүй бол _ (blank identifier) ашиглана — энэ нь "энэ утгыг хэрэглэхгүй" гэдгийг Go-д мэдэгддэг.

Давхар давталт

go
package main

import "fmt"

func main() {
    // Үржвэрийн хүснэгт
    for i := 1; i <= 3; i++ {
        for j := 1; j <= 3; j++ {
            fmt.Printf("%d x %d = %d\t", i, j, i*j)
        }
        fmt.Println()
    }
}

Гаралт:

код
1 x 1 = 1	1 x 2 = 2	1 x 3 = 3
2 x 1 = 2	2 x 2 = 4	2 x 3 = 6
3 x 1 = 3	3 x 2 = 6	3 x 3 = 9

Дараагийн хичээлд:

Код давтамжтай ашиглагдах хэсгийг функц болгон ялгаж, нэрлэж, дуудаж сурна. Функц бол програмчлалын хамгийн чухал бүтэц — нэг удаа бичиж, олон газар ашиглах боломжийг олгодог.