Funzioni anonime
Lezione 9 di 19 del corso Funzioni e puntatori in Golang di Coddy.
Ciò che abbiamo già imparato è come definire una funzione con un nome e, quando dobbiamo chiamarla, usiamo quel nome. Tuttavia, esiste un altro tipo di funzione senza nome, che chiamiamo funzione anonima.
Si comporta proprio come una funzione semplice, ma con alcune differenze nel funzionamento. Queste funzioni ci consentono di definire azioni direttamente, senza dover definire una funzione altrove.
Vediamo un esempio di come definire una funzione anonima:
b := func(x, y int) int { return x - y }
fmt.Println(b(100, 50))Qui definiamo una variabile b che memorizza una funzione anonima che esegue una sottrazione. Quando chiamiamo la funzione, usiamo semplicemente il nome della variabile b(100, 50).
Possiamo anche ricevere una funzione anonima come risultato da un'altra funzione. Per esempio:
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))
}Qui definiamo una funzione regolare chiamata operation, e il risultato (il valore restituito) sarà una funzione anonima <strong>func(int) int</strong> invece di un semplice valore.
Assegniamo il valore restituito a una variabile b. Poiché passiamo 1 come parametro alla funzione operation, il blocco che verrà eseguito è questo:
return func(a int) int { return a + 10 }Ora, quando chiamiamo la nostra funzione anonima b, dobbiamo passare un valore intero, per esempio 14.
Il risultato sarà:
24Questo è il calcolo di a + 10, dove passiamo a, che è 14(<strong>b(14)</strong>).
Sfida
FacileScrivi una funzione anonima che accetta tre argomenti interi.
Se il primo argomento è maggiore dell'ultimo , restituisci la somma di tutti gli argomenti. Altrimenti, restituisci il prodotto del primo e dell'ultimo argomento.
Memorizza il risultato della funzione in una variabile chiamata result.
Provalo tu
package main
import "fmt"
func main() {
// Define la función anónima y asígnala a una variable llamada "result".
// Imprime el resultado. ¡No cambies esto!
fmt.Println("Result:", result(2, 3, 4))
fmt.Println("Result:", result(8, 3, 4))
}
Tutte le lezioni di Funzioni e puntatori in Golang
1Introduzione
Introduzione4Ricostruire le funzioni Strings di Go
Stringhe in GolangFunzione JoinFunzione ContainsFunzione IndexSfida di ripasso #15Ricostruire le funzioni delle slice in Go
Funzione di uguaglianzaFunzione di lunghezzaSfida di riepilogo n. 1Esercitati da solo: Compilatore Go online