Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/main/articles.php on line 18
Función anónima
Tiempo de lectura: 1 minutos
Una función anónima es simplemente una función sin un nombre explícito
Función anónima
Una función anónima es simplemente una función sin un nombre explícito y se define justo donde se necesita, dentro de un bloque de código. Solo se pueden utilizar dentro del bloque de código en el que se declaran, por ejemplo:
package main
import "fmt"
func main() {
func() {
fmt.Println("Esta es la función anónima")
}()
} La función se define sin nombre y se ejecuta de forma inmediata indicando los dos paréntesis (). O bien se puede asignar a una variable para llamarla en otro momento del código de la función que la define:
func main() {
// Asignar una función anónima a una variable
saludo := func(nombre string) {
fmt.Println("Hola", nombre)
}
// Llama a la función a través de la variable
saludo("Mundo")
} Podemos considerar que el nombre del función guardada es el de la variable asignada.
Funciones como parámetros
Puedes pasar funciones anónimas como argumentos a otras funciones, lo que es común en patrones como el de “callback”. El argumento en el ejemplo siguiente seria (operacion func(int, int) int, a int, b int).
package main
import "fmt"
func calculate(operation func(int, int) int, a int, b int) int {
return operation(a, b)
}
func main() {
sum := func(x, y int) int {
return x + y
}
result := calculate(suma, 3, 4)
fmt.Println("El resultado es:", result)
} Clausuras
Un closure es una implementación de una función anónima como retorno de una función principal. Esta técnica es muy útil, ya que permite que la función principal pueda ser asignada o delegada a una "variable" que es en sí el closure. En ese momento, las variables de la función principal se registran o inicializan y el control pasa al closure.
package main
import "fmt"
func main() {
fmt.Println("Secuencia de Fibonacci")
nextNumber := fibonacci()
for i := 1; i < 10; i++ {
fmt.Println(nextNumber())
}
}
func fibonacci() func() int {
var num1, num2 int = 0, 1
return func() int {
var result int = num1 + num2
num1 = num2
num2 = result
return result
}
}