Funciones Anónimas en Go: Uso y Consideraciones Prácticas
Clase 13 de 30 • Curso de Go Intermedio: Programación Orientada a Objetos y Concurrencia
Contenido del curso
- 5

Programación Orientada a Objetos en Go: Análisis y Comparativa
06:51 - 6

Equivalente de Clases en Go: Uso de Structs y Propiedades
06:41 - 7

Métodos en Structs: Implementación de Receiver Functions en Go
08:54 - 8

Implementación de Constructores en Go: Ejemplos y Mejores Prácticas
10:48 - 9

Herencia y Composición en Programación Orientada a Objetos
14:50 - 10

Interfaces y Polimorfismo en TypeScript y Go
12:35 - 11

Patrón Abstract Factory: Interfaces y Polimorfismo en Go
07:37 - 12

Implementación del Patrón Factory en Go para Notificaciones
10:10 - 13

Funciones Anónimas en Go: Uso y Consideraciones Prácticas
06:56 - 14

Funciones Variádicas y Retornos con Nombre en Go
10:51
- 22

Canales con y sin buffer en Go: diferencias y uso práctico
06:23 - 23

Sincronización de Rutinas en Go con Wait Group
07:26 - 24

"Uso de Canales con Buffer como Semáforos en Go"
09:00 - 25

Manejo de Canales de Lectura y Escritura en Go
09:34 - 26

Concurrencia en Go: Creación de Worker Pools y Fibonacci
11:23 - 27

Multiplexación de Canales en Go con Select y Case
07:13
¿Qué es una función anónima en Go?
Las funciones anónimas, también conocidas como funciones sin nombre, son un concepto interesante en programación y Go no es la excepción al implementarlas. Estas funciones se crean para ser utilizadas una sola vez y no se pueden referenciar de nuevo, pues carecen de un nombre. Este enfoque es útil cuando estamos absolutamente seguros de que la funcionalidad solo se necesita ejecutar una única vez.
¿Cómo implementamos funciones anónimas en Go?
Veamos cómo se utiliza el concepto de funciones anónimas en el código Go. Primero, crearemos un archivo llamado functions.go. Luego, dentro de este archivo, definimos el paquete principal y una función main. Se propone crear una variable x e implementar una función anónima que duplique su valor.
package main
func main() {
x := 5
y := func() int {
return x * 2
}()
println(y)
}
En este bloque, la función para obtener el doble del valor de x se declara e inmediatamente se invoca. La función anónima se asigna a una variable y, que se imprime a continuación. Sin embargo, si necesitamos reutilizar esta función con otro valor, corremos el riesgo de duplicar código.
¿Cuáles son las desventajas de repetir código con funciones anónimas?
El ejemplo anterior nos mostró que si intentamos reutilizar el código de la función con otra variable, estaríamos repitiendo código, lo cual va en contra del principio DRY (Don't Repeat Yourself). Este principio promueve evitar la duplicación en el diseño de software.
package main
func main() {
x := 5
y := func() int {
return x * 2
}()
println(y)
z := 10
doubleZ := func() int {
return z * 2
}()
println(doubleZ)
}
Aunque el enfoque puede funcionar, no es una buena práctica. Repetiríamos el mismo bloque de código en lugar de abstraerlo en una función.
¿Cómo se utilizan funciones anónimas con Goroutines?
Otra utilidad clave de las funciones anónimas es en la ejecución concurrente con Goroutines en Go. Las funciones anónimas nos permiten realizar procesos largos sin bloquear el flujo general del programa.
package main
import (
"fmt"
"time"
)
func main() {
done := make(chan bool)
go func() {
fmt.Println("Iniciando la función...")
time.Sleep(5 * time.Second)
fmt.Println("Función terminada.")
done <- true
}()
<-done
fmt.Println("Programa completado.")
}
En este ejemplo, hemos usado una función anónima para simular un proceso largo que espera 5 segundos antes de finalizar. Esto demuestra la potencia de las funciones anónimas al permitirnos ejecutar código de manera concurrente usando Goroutines.
¿Cuándo es recomendable usar funciones anónimas?
El uso de funciones anónimas es práctico en situaciones donde:
- Necesitamos realizar una operación sencilla una sola vez.
- Deseamos aplicar funcionalidad en tiempo de ejecución sin saturar el espacio de nombres con funciones no reutilizables.
- En conjunción con Goroutines para manejar procesos concurrentes.
Sin embargo, es crucial recordar que contar con bloques de código duplicado complica el mantenimiento del mismo y no es recomendado. Por lo tanto, el diseño en Go debe tener en cuenta el equilibrio entre funcionalidad, simplicidad y reutilización.
¡Sigue explorando y practicando para afianzar tu conocimiento en Go y sus diversas herramientas! La práctica constante y el aprendizaje continuo son claves para un desarrollo exitoso en la programación.