Menu
Coddy logo textTech

Funkcje anonimowe

Lekcja 9 z 19 w kursie Funkcje i wskaźniki w Golang w Coddy.

To, czego już się nauczyliśmy, to definiowanie funkcji z nazwą. Gdy chcemy ją wywołać, używamy tej nazwy. Istnieje jednak inny rodzaj funkcji, który nie ma nazwy — nazywamy go funkcją anonimową.

Działa ona tak jak zwykła funkcja, ale różni się nieco sposobem działania. Takie funkcje pozwalają nam definiować działania bezpośrednio, bez konieczności definiowania funkcji w innym miejscu.

Przyjrzyjmy się przykładowi definiowania funkcji anonimowej:

b := func(x, y int) int { return x - y }
fmt.Println(b(100, 50))

Tutaj definiujemy zmienną b, w której przechowywana jest funkcja anonimowa wykonująca odejmowanie. Gdy wywołujemy tę funkcję, po prostu używamy nazwy zmiennej b(100, 50).

Możemy też otrzymać funkcję anonimową jako wynik innej funkcji. Na przykład:

func operation(a int) func(int) int {
    if a == 1 {
        return func(a int) int { return a + 10 }
    } else {
        return func(a int) int { return a * 10 }
    }
}
func main() {
    b := operation(1)
    fmt.Println(b(14))
}

Tutaj definiujemy zwykłą funkcję o nazwie operation, a jej wynikiem (zwracaną wartością) będzie funkcja anonimowa <strong>func(int) int</strong> zamiast zwykłej wartości.

Przypisujemy zwracaną wartość do zmiennej b. Ponieważ przekazujemy 1 jako parametr funkcji operation, zostanie wykonany ten blok:

return func(a int) int { return a + 10 }

Teraz, gdy wywołujemy naszą funkcję anonimową b, musimy przekazać wartość całkowitą, na przykład 14.

Wynik będzie następujący:

24

To obliczenie wartości a + 10, gdzie przekazujemy a równe 14(<strong>b(14)</strong>).
 

challenge icon

Wyzwanie

Łatwy

Napisz funkcję anonimową, która przyjmuje trzy argumenty typu całkowitego.

Jeśli pierwszy argument jest większy niż ostatni , zwróć sumę wszystkich argumentów. Jeśli nie, zwróć iloczyn pierwszego i ostatniego argumentu.

Zapisz wynik funkcji w zmiennej o nazwie result.

Spróbuj swoich sił

package main

import "fmt"

func main() {
    // Zdefiniuj funkcję anonimową i przypisz ją do zmiennej o nazwie "result".
 
    
    
    // Wypisz wynik. Nie zmieniaj tego!
    fmt.Println("Result:", result(2, 3, 4))
    fmt.Println("Result:", result(8, 3, 4))
}

Wszystkie lekcje w sekcji Funkcje i wskaźniki w Golang

Poćwicz samodzielnie: Kompilator Go online