Go / Хувьсагч ба тогтмол (var, const)

Хувьсагч ба тогтмол (var, const)

Программ бичихдээ мэдээлэл хадгалах, ашиглах шаардлага байнга гардаг. Хувьсагч (variable) гэдэг нь утга хадгалдаг нэртэй хайрцаг юм. var ба := ашиглан хувьсагч зарлаж, const ашиглан тогтмол тодорхойлж сурна.

var — хувьсагч зарлах

Go-д хувьсагч зарлах үндсэн арга бол var түлхүүр үг:

go
package main

import "fmt"

func main() {
    var name string = "Болд"
    var age int = 25
    var height float64 = 1.75

    fmt.Println(name)
    fmt.Println(age)
    fmt.Println(height)
}

Гаралт:

код
Болд
25
1.75

var зарлалын бүтэц: var [нэр] [төрөл] = [утга]

Утгыг орхиж болно — тэгвэл Go тухайн төрлийн анхны утгыг (zero value) өгнө:

go
var name string    // "" (хоосон мөр)
var age int        // 0
var active bool    // false
var price float64  // 0.0

:= — богино зарлал

Функцийн дотор хамгийн түгээмэл ашигладаг арга бол := (short variable declaration):

go
package main

import "fmt"

func main() {
    name := "Сарнай"
    age := 22
    score := 98.5
    passed := true

    fmt.Println(name, age, score, passed)
}

Гаралт:

код
Сарнай 22 98.5 true

:= ашиглахад Go өөрөө төрлийг тааварлана (type inference). name := "Сарнай" гэхэд Go name бол string гэдгийг мэддэг. Энэ нь кодыг богино, уншихад хялбар болгодог.

Ялгаа: var нь функцийн гадна болон дотор хаана ч ашиглаж болно. := нь зөвхөн функцийн дотор ашиглана.

Олон хувьсагч нэгэн зэрэг зарлах

go
package main

import "fmt"

func main() {
    // var ашиглан олон хувьсагч
    var (
        city    string = "Улаанбаатар"
        country string = "Монгол"
        pop     int    = 1600000
    )

    // := ашиглан олон хувьсагч
    x, y, z := 10, 20, 30

    fmt.Println(city, country, pop)
    fmt.Println(x, y, z)
}

Гаралт:

код
Улаанбаатар Монгол 1600000
10 20 30

Хувьсагчийн утгыг өөрчлөх

Хувьсагч гэсэн нэрийн утга нь — утга нь хувирч болно:

go
package main

import "fmt"

func main() {
    score := 0
    fmt.Println("Эхний оноо:", score)

    score = 10
    fmt.Println("Дараах оноо:", score)

    score = score + 5
    fmt.Println("Эцсийн оноо:", score)
}

Гаралт:

код
Эхний оноо: 0
Дараах оноо: 10
Эцсийн оноо: 15

Анхаар: шинэ хувьсагч зарлахдаа := хэрэглэнэ, аль хэдийн зарласан хувьсагчийн утгыг өөрчлөхдөө = л хэрэглэнэ.

const — тогтмол

Тогтмол (constant) гэдэг нь нэг удаа тодорхойлогдоод хэзээ ч өөрчлөгддөггүй утга:

go
package main

import "fmt"

func main() {
    const Pi = 3.14159
    const AppName = "Уlaanbaatar.app"
    const MaxScore = 100

    fmt.Println(Pi)
    fmt.Println(AppName)
    fmt.Println(MaxScore)
}

Тогтмолын утгыг өөрчлөхийг оролдвол compile хийхэд алдаа гарна:

go
const Pi = 3.14159
Pi = 3.0   // алдаа! cannot assign to Pi

Тогтмолыг хэзээ ашиглах вэ? Математикийн тогтмол (Pi, E), хамгийн их/бага утга, тохиргооны утгууд гэх мэт өөрчлөгдөж болохгүй зүйлд ашиглана.

iota — тоолуур тогтмол

Go-д iota гэсэн тусгай тогтмол байдаг. const блок дотор автоматаар 0-ээс эхлэн нэмэгддэг:

go
package main

import "fmt"

const (
    Sunday = iota   // 0
    Monday          // 1
    Tuesday         // 2
    Wednesday       // 3
    Thursday        // 4
    Friday          // 5
    Saturday        // 6
)

func main() {
    fmt.Println(Sunday, Monday, Friday, Saturday)
}

Гаралт:

код
0 1 5 6

iota нь нэрлэгдсэн тоонуудын цуваа үүсгэхэд маш хэрэгтэй.

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

Go-ийн өгөгдлийн төрлүүдийг нарийвчлан үзнэ — int, float64, string, bool болон тэдгээрийн дэд төрлүүдийг (int8, int16, int32...) судлана. Ямар нөхцөлд ямар төрөл ашиглахыг практик жишээгээр сурна.