for давталт
Давталт гэдэг нь нэг кодыг олон удаа ажиллуулах хэрэгсэл. Go-д давталтын цорын ганц түлхүүр үг бол for — while, do/while гэж байхгүй. Гэхдээ for нь маш уян хатан бөгөөд бусад хэлнүүдийн бүх давталтын хэлбэрийг орлодог.
Классик for давталт
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 болмогц давталт дуусна.
Нийлбэр, үржвэр тооцоолох
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-тай яг адил ажилладаг:
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 ашиглан давталтаас гарна:
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 нь тухайн давталтын үлдсэн кодыг алгасаж, дараагийн давталтад шилждэг:
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 зэрэг өгөгдлийн бүлгийг давтахад хэрэглэнэ:
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-д мэдэгддэг.
Давхар давталт
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
Дараагийн хичээлд:
Код давтамжтай ашиглагдах хэсгийг функц болгон ялгаж, нэрлэж, дуудаж сурна. Функц бол програмчлалын хамгийн чухал бүтэц — нэг удаа бичиж, олон газар ашиглах боломжийг олгодог.