Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61

Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61
Función anónima
Source Code

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
   }
}
Xavier es un desarrollador senior full stack y opera desde la ciudad mediterránea de Barcelona. Le encantan las tecnologías de software y está convencido que el desarrollo de software es un proceso colaborativo y abierto.
Y es un apasionado de la astronomía y de la fotografía. Lo puedes encontrar en:
Comparte este post