Darsliklar Go Lang Funksiya

Go Lang Go Lang Funksiya

Funksiya — ma’lum vazifani bajaradigan, nom bilan atalgan va qayta-qayta chaqirilishi mumkin bo’lgan kod bloki. Go’da funksiya func kalit so’zi bilan e’lon qilinadi, parametr va qaytish turlari esa qat’iy belgilanadi.

funcfunksiya e’lon qilish kalit so’zi. func nom(parametrlar) qaytishTuri { ... } shaklida yoziladi. Go’da funksiya ortiqcha yuklash (overloading) qo’llab-quvvatlanmaydi — bir nomli funksiya bitta paketda faqat bitta bo’lishi mumkin.

Funksiya yaratish va chaqirish

package main

import "fmt"

func salomlash() {
    fmt.Println("Assalomu alaykum, UzbekDevs!")
}

func main() {
    salomlash()
    salomlash()
}
Assalomu alaykum, UzbekDevs!
Assalomu alaykum, UzbekDevs!

func salomlash() — hech narsa qabul qilmaydigan, hech narsa qaytarmaydigan funksiya. main — dasturning boshlanish nuqtasi bo’lgan maxsus funksiya, ijro har doim shu yerdan boshlanadi.

Parametr va qaytish turi

Parametr turi nomidan keyin yoziladi, qaytish turi esa qavsdan keyin ko’rsatiladi:

package main

import "fmt"

func yigindi(a int, b int) int {
    return a + b
}

func main() {
    natija := yigindi(15, 27)
    fmt.Println(natija)
}
42

func yigindi(a int, b int) int — ikkita int qabul qilib, int qaytaradigan funksiya. Agar ketma-ket parametrlar bir xil turda bo’lsa, turi faqat oxirgisida yozilishi mumkin: func yigindi(a, b int) int — bu ikkalasi bir xil ma’noni bildiradi.

Nomlangan qaytish qiymati (named return)

Go’da qaytish qiymatiga oldindan nom berish mumkin — bu holda return argumentsiz (“yalang’och”) yozilishi mumkin:

package main

import "fmt"

func boling(a, b int) (natija int) {
    natija = a + b
    return
}

func main() {
    fmt.Println(boling(15, 27))
}
42

(natija int) — qaytish qiymatiga oldindan natija nomi va zero-value (0) berildi. Funksiya ichida unga oddiy o’zgaruvchidek qiymat berilib, return yalang’och qoldirilsa, natijaning joriy qiymati avtomatik qaytadi. Bu naqsh qisqa funksiyalarda qulay, lekin uzun funksiyalarda o’qishni qiyinlashtirishi mumkin — shuning uchun ehtiyotkorlik bilan qo’llaniladi.

Overloading yo’q

C++’dan farqli, Go’da bir xil nomli, lekin turli parametrli ikkita funksiya bo’lishi mumkin emas:

package main

func qoshish(a, b int) int {
    return a + b
}

func qoshish(a, b float64) float64 {
    return a + b
}

func main() {
}
# command-line-arguments
./main.go:7:6: qoshish redeclared in this block
    ./main.go:3:6: other declaration of qoshish

Ikkinchi qoshish e’loni birinchisi bilan to’qnashadi — Go bunga yo’l qo’ymaydi. Turli parametrlar uchun turli nom tanlash (qoshishInt, qoshishFloat) yoki keyingi darslarda ko’radigan interfeys/generics kerak bo’ladi.