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:
24To obliczenie wartości a + 10, gdzie przekazujemy a równe 14(<strong>b(14)</strong>).
Wyzwanie
ŁatwyNapisz 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
1Wprowadzenie
Wprowadzenie4Odtwórz funkcje obsługi ciągów znaków w Go
Ciągi znaków w GolangFunkcja JoinFunkcja ContainsFunkcja IndexWyzwanie podsumowujące nr 1Poćwicz samodzielnie: Kompilator Go online