Go / if/else нөхцөл

if/else нөхцөл

Программ бол зөвхөн дараалан ажилладаг биш — нөхцөлөөс хамаарч өөр өөр замаар явдаг. "Хэрэв оноо 90-ээс дээш бол A үнэлгээ өг, үгүй бол B өг" гэх мэт шийдвэр гаргахад if/else хэрэглэнэ. Энэ бол програмчлалын хамгийн суурь ойлголтуудын нэг.

if — энгийн нөхцөл

go
package main

import "fmt"

func main() {
    score := 85

    if score >= 90 {
        fmt.Println("Маш сайн!")
    }

    fmt.Println("Програм дуусав.")
}

Гаралт:

код
Програм дуусав.

score нь 85 тул score >= 90 нь false — блок дотрых код ажиллахгүй. Хэрэв score := 95 байсан бол "Маш сайн!" хэвлэгдэх байлаа.

Go-д нөхцөлийг хаалтад ( ) оруулах шаардлагагүй — энэ нь C, Java зэрэг хэлнүүдээс ялгарах онцлог. Гэхдээ блокийн хаалт { } заавал байх ёстой.

if / else

go
package main

import "fmt"

func main() {
    temperature := 22

    if temperature >= 20 {
        fmt.Println("Дулаан байна. Гадаа гарахад тохиромжтой.")
    } else {
        fmt.Println("Хүйтэн байна. Хүрэм өмс.")
    }
}

Гаралт:

код
Дулаан байна. Гадаа гарахад тохиромжтой.

if нөхцөл true бол дээрх блок, false бол else блок ажиллана. Хоёрын аль нэг заавал ажиллана.

else if — олон нөхцөл

go
package main

import "fmt"

func main() {
    score := 73

    if score >= 90 {
        fmt.Println("А үнэлгээ — Маш сайн")
    } else if score >= 80 {
        fmt.Println("B үнэлгээ — Сайн")
    } else if score >= 70 {
        fmt.Println("C үнэлгээ — Дунд")
    } else if score >= 60 {
        fmt.Println("D үнэлгээ — Хангалттай")
    } else {
        fmt.Println("F үнэлгээ — Тэнцсэнгүй")
    }
}

Гаралт:

код
C үнэлгээ — Дунд

Go нөхцлүүдийг дараалан шалгана. Анхных нь true болмогц тэр блокийг ажиллуулж, үлдсэнийг алгасна. score нь 73 тул эхний хоёр нөхцөл false, гурав дахь нь true.

Богино хувьсагч зарлал if дотор

Go-д if мөрт хувьсагч зарлаж болно. Тухайн хувьсагч зөвхөн if/else блок дотор хүчинтэй байна:

go
package main

import "fmt"

func main() {
    // x зөвхөн if/else дотор хүчинтэй
    if x := 42; x > 40 {
        fmt.Println("x их байна:", x)
    } else {
        fmt.Println("x бага байна:", x)
    }

    // fmt.Println(x)  // АЛДАА! x энд хүчингүй
}

Гаралт:

код
x их байна: 42

Энэ хэв маяг нь function-с утга авч, шууд шалгах үед ихэвчлэн хэрэглэгддэг. Алдааг шалгах (error handling) хэсэгт байнга харна.

Логик операторуудтай хослуулах

go
package main

import "fmt"

func main() {
    age      := 20
    hasID    := true
    isMember := false

    // && — хоёул биелэх ёстой
    if age >= 18 && hasID {
        fmt.Println("Орж болно.")
    }

    // || — аль нэг биелэхэд хангалттай
    if age >= 18 || isMember {
        fmt.Println("Хөнгөлөлт эдлэх эрхтэй.")
    }

    // ! — үгүйсгэл
    if !isMember {
        fmt.Println("Гишүүнчлэл авбал 20% хөнгөлөлт авна.")
    }
}

Гаралт:

код
Орж болно.
Хөнгөлөлт эдлэх эрхтэй.
Гишүүнчлэл авбал 20% хөнгөлөлт авна.

Nested if — дотор нөхцөл

if блок дотор дахин if бичиж болно:

go
package main

import "fmt"

func main() {
    username := "admin"
    password := "1234"

    if username == "admin" {
        if password == "1234" {
            fmt.Println("Нэвтэрлээ!")
        } else {
            fmt.Println("Нууц үг буруу.")
        }
    } else {
        fmt.Println("Хэрэглэгч олдсонгүй.")
    }
}

Гаралт:

код
Нэвтэрлээ!

Nested if-г хэт гүн болгохоос зайлсхий — ихэвчлэн 2–3 түвшингээс хэтрэхгүй байх нь кодыг уншихад хялбар болгодог.

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

Олон утгатай харьцуулалт хийхэд if/else if гинжний оронд switch ашиглах нь кодыг хамаагүй цэвэр, уншихад хялбар болгодог. Go-ийн switch нь бусад хэлнүүдийнхээс хэд хэдэн ашигтай ялгаатай.