Usando Funções Anônimas como Funções de Callback
Funções anônimas também podem ser usadas como callbacks (funções de retorno), o que significa que podemos passá-las como argumentos para outras funções. Isso é útil quando você deseja personalizar o comportamento de uma função sem criar uma função nomeada.
O que são Funções de Callback?
Uma função de callback é uma função que é passada como um argumento para outra função e é executada após a primeira função concluir sua tarefa. Isso permite que o chamador personalize o comportamento da função que está sendo chamada, proporcionando mais flexibilidade e modularidade. Em essência, a função que recebe um callback chamará a função de callback "de volta" em algum momento.
Por que usar Funções Anônimas como Callbacks?
Funções anônimas funcionam excepcionalmente bem como funções de callback porque frequentemente representam comportamentos curtos e específicos que são usados apenas dentro de um contexto particular. Usar uma função anônima como um callback mantém o código mais conciso e evita ter que definir uma função nomeada separada.
Substitua anonymous.go pelo seguinte código:
package main
import (
"fmt"
"math"
)
// 'visit' recebe uma fatia e uma função. Ela aplica a função a cada elemento na fatia.
func visit(lst []float64, f func(float64)) {
for _, value := range lst {
f(value)
}
}
func main() {
arr := []float64{1, 2, 3, 4, 5, 6, 7, 8, 9}
// Use uma função anônima para somar cada elemento com ele mesmo
visit(arr, func(v float64) {
fmt.Printf("Sum:%.0f ", v+v)
})
fmt.Println()
// Use uma função anônima para multiplicar cada elemento por ele mesmo
visit(arr, func(v float64) {
fmt.Printf("Product:%.0f ", v*v)
})
fmt.Println()
// Use uma função anônima para elevar ao quadrado cada elemento usando math.Pow
visit(arr, func(v float64) {
v = math.Pow(v, 2)
fmt.Printf("Square:%.0f ", v)
})
fmt.Println()
}
Execute o programa:
go run anonymous.go
Saída esperada:
Sum:2 Sum:4 Sum:6 Sum:8 Sum:10 Sum:12 Sum:14 Sum:16 Sum:18
Product:1 Product:4 Product:9 Product:16 Product:25 Product:36 Product:49 Product:64 Product:81
Square:1 Square:4 Square:9 Square:16 Square:25 Square:36 Square:49 Square:64 Square:81
Neste programa, primeiro criamos uma função visit que recebe uma fatia (lst) de float64 e uma função (f) do tipo func(float64). A função visit itera sobre a fatia e chama a função fornecida f para cada elemento. Este padrão de projeto permite que a função visit execute diferentes lógicas dependendo da função de callback f fornecida.
Dentro da função main, chamamos visit três vezes com diferentes funções anônimas para demonstrar como os callbacks fornecem flexibilidade.
- A primeira função anônima calcula a soma de cada elemento com ele mesmo.
- A segunda função anônima calcula o produto de cada elemento com ele mesmo.
- A terceira função anônima eleva ao quadrado cada elemento usando
math.Pow.
Isso ilustra como uma função anônima pode ser passada como um callback e como a função visit pode realizar diferentes ações com base na função de callback passada como um parâmetro. Isso torna seu código mais reutilizável e modular.