24 / 68

Anonymous Function

Nomsiz funksiyalar

Go dasturlash tilida nom berilmagan funksiyalarni yaratish mumkin. Bunday funksiyalar anonim (nomsiz) funksiyalar deb ataladi.

example.go
func() {
    fmt.Println("Nomsiz funksiya")
}

Bunday funksiyalar odatda o'zgaruvchiga biriktiriladi yoki boshqa funksiyalarga argument sifatida uzatiladi.


1. Anonim funksiyani e'lon qilish va chaqirish

Anonim funksiyani chaqirishning eng keng tarqalgan usuli — uni biror o'zgaruvchiga o'zlashtirish va o'sha o'zgaruvchi nomiga qavslar () qo'yib chaqirishdir:

example.go
package main

import "fmt"

func main() {
    // Anonim funksiyani greet o'zgaruvchisiga o'zlashtiramiz
    var greet = func() {
        fmt.Println("Salom, qandaysiz?")
    }

    // Funksiyani chaqiramiz
    greet()
}

Natija:

kod
Salom, qandaysiz?

2. Parametrli anonim funksiyalar

Oddiy funksiyalar singari, anonim funksiyalar ham tashqaridan parametrlar qabul qila oladi:

example.go
package main

import "fmt"

func main() {
    // Ikkita parametr qabul qiluvchi anonim funksiya
    var sum = func(n1, n2 int) {
        natija := n1 + n2
        fmt.Println("Yig'indi:", natija)
    }

    // Argumentlar uzatib chaqiramiz
    sum(5, 3)
}

Natija:

kod
Yig'indi: 8

3. Anonim funksiyadan qiymat qaytarish (return)

Anonim funksiya parametrlar ro'yxatidan so'ng qaytarish turini ko'rsatib, natijani return qilish mumkin:

example.go
package main

import "fmt"

func main() {
    var sum = func(n1, n2 int) int {
        return n1 + n2
    }

    result := sum(5, 3)
    fmt.Println("Yig'indi:", result)
}

Misol: To'rtburchak yuzini hisoblovchi anonim funksiya

example.go
package main

import "fmt"

func main() {
    // To'rtburchak yuzini hisoblovchi anonim funksiya
    area := func(length, breadth int) int {
        return length * breadth
    }

    fmt.Println("To'rtburchak yuzasi:", area(3, 4))
}

Natija:

kod
To'rtburchak yuzasi: 12

4. Anonim funksiyani boshqa funksiyaga argument sifatida uzatish

Go tilida funksiyalar birinchi darajali fuqarolar (first-class citizens) hisoblangani bois, anonim funksiyaning natijasini yoki funksiyaning o'zini boshqa funksiyaga argument qilib berish mumkin:

example.go
package main

import "fmt"

// Sonning kvadratini topuvchi oddiy funksiya
func findSquare(num int) int {
    return num * num
}

func main() {
    // Yig'indini qaytaruvchi anonim funksiya
    sum := func(number1 int, number2 int) int {
        return number1 + number2
    }

    // sum(6, 9) natijasi findSquare() ga uzatiladi
    result := findSquare(sum(6, 9))

    fmt.Println("Natija:", result)
}

Natija:

kod
Natija: 225

Bu yerda dastlab sum(6, 9) ishlab 15 natijasini beradi, so'ngra findSquare(15) chaqirilib 15² = 225 natija hosil bo'ladi.


5. Funksiyadan anonim funksiya qaytarish

Funksiyaning qaytarish turi sifatida yana boshqa bir funksiyani belgilash mumkin:

example.go
package main

import "fmt"

// Qaytarish turi func() int bo'lgan funksiya
func displayNumber() func() int {
    number := 10

    // Ichki anonim funksiyani qaytaramiz
    return func() int {
        number++
        return number
    }
}

func main() {
    a := displayNumber()

    fmt.Println(a()) // 11
}

Bu yerda displayNumber() chaqirilganda, u ichidagi anonim funksiyani qaytaradi. So'ng a() orqali o'sha qaytarilgan funksiyani ishlatamiz. Bu mexanizm keyingi mavzudagi Closure (yopilishlar) ning poydevori hisoblanadi.