Usando Funciones Anónimas como Funciones de Callback
Las funciones anónimas también se pueden utilizar como callbacks, lo que significa que podemos pasarlas como argumentos a otras funciones. Esto es útil cuando se desea personalizar el comportamiento de una función sin crear una función con nombre.
¿Qué son las Funciones de Callback?
Una función de callback es una función que se pasa como argumento a otra función y se ejecuta después de que la primera función complete su tarea. Esto permite al llamante personalizar el comportamiento de la función que se está llamando, brindando más flexibilidad y modularidad. En esencia, la función que recibe un callback llamará a la función de callback "de vuelta" en algún momento.
¿Por qué Usar Funciones Anónimas como Callbacks?
Las funciones anónimas funcionan excepcionalmente bien como funciones de callback porque a menudo representan comportamientos cortos y específicos que solo se utilizan dentro de un contexto particular. Usar una función anónima como callback mantiene el código más conciso y evita tener que definir una función con nombre separada.
Reemplaza anonymous.go con el siguiente código:
package main
import (
"fmt"
"math"
)
// 'visit' takes a slice and a function. It applies the function to each element in the slice.
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 an anonymous function to sum each element with itself
visit(arr, func(v float64) {
fmt.Printf("Sum:%.0f ", v+v)
})
fmt.Println()
// Use an anonymous function to multiply each element by itself
visit(arr, func(v float64) {
fmt.Printf("Product:%.0f ", v*v)
})
fmt.Println()
// Use an anonymous function to square each element using math.Pow
visit(arr, func(v float64) {
v = math.Pow(v, 2)
fmt.Printf("Square:%.0f ", v)
})
fmt.Println()
}
Ejecuta el programa:
go run anonymous.go
Salida 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
En este programa, primero creamos una función visit que toma una slice (lst) de float64 y una función (f) de tipo func(float64). La función visit itera sobre la slice y llama a la función proporcionada f para cada elemento. Este patrón de diseño permite que la función visit ejecute diferentes lógicas dependiendo de la función de callback f proporcionada.
Dentro de la función main, llamamos a visit tres veces con diferentes funciones anónimas para demostrar cómo los callbacks brindan flexibilidad.
- La primera función anónima calcula la suma de cada elemento consigo mismo.
- La segunda función anónima calcula el producto de cada elemento consigo mismo.
- La tercera función anónima eleva al cuadrado cada elemento utilizando
math.Pow.
Esto ilustra cómo una función anónima se puede pasar como un callback y cómo la función visit puede realizar diferentes acciones basadas en la función de callback pasada como parámetro. Esto hace que tu código sea más reutilizable y modular.