Skip to content

Commit f3ef51f

Browse files
author
Gerardo Medellin
committed
#21 - Go
1 parent 382a6c8 commit f3ef51f

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"time"
6+
)
7+
8+
// NOTA: Un callback es una función que se pasa como argumento a otra función.
9+
10+
// Definimos un tipo para la funcion callback, en este caso recibe un entero y devuelve un entero
11+
type Callback func(int) int
12+
13+
// Definimos una funcion que aplique una operacion al numero que recibe y devuelve el resultado
14+
func applyCallback(num int, callback Callback) int {
15+
return callback(num)
16+
}
17+
18+
func main() {
19+
// Definimos una funcion que multiplica por 2 el numero.
20+
duplica := func(num int) int {
21+
return num * 2
22+
}
23+
24+
// Definimos otra funcion que suma el numero con 10
25+
suma := func(num int) int {
26+
return num + 10
27+
}
28+
29+
// Aplicamos la funcion duplicar al numero 5
30+
fmt.Println("Resultado de multiplicar 5 por 2:", applyCallback(5, duplica))
31+
32+
// Aplicamos la funcion triplicar al numero 5
33+
fmt.Println("Resultado de sumar 15 con 10:", applyCallback(15, suma))
34+
35+
// Extra
36+
simuladorPedidos()
37+
38+
}
39+
40+
func simuladorPedidos() {
41+
42+
// Definimos las funciones de confirmacion, listo y entrega
43+
confirmacion := func(num int) int {
44+
fmt.Println("Pedido confirmado")
45+
return num
46+
}
47+
48+
listo := func(num int) int {
49+
fmt.Println("Plato listo")
50+
return num
51+
}
52+
53+
entrega := func(num int) int {
54+
fmt.Println("Pedido entregado")
55+
return num
56+
}
57+
58+
// Simulamos un pedido de pizza
59+
procesarPedido("Pizza", confirmacion, listo, entrega)
60+
61+
// Simulamos un pedido de hamburguesa
62+
procesarPedido("Hamburguesa", confirmacion, listo, entrega)
63+
}
64+
65+
func procesarPedido(plato string, confirmacion, listo, entrega Callback) {
66+
fmt.Println("Procesando pedido de", plato)
67+
68+
time.Sleep(time.Duration(1+time.Now().Nanosecond()%10) * time.Second) // Simulamos un tiempo aleatorio entre 1 y 10 segundos
69+
confirmacion(1)
70+
71+
time.Sleep(time.Duration(1+time.Now().Nanosecond()%10) * time.Second)
72+
listo(2)
73+
74+
time.Sleep(time.Duration(1+time.Now().Nanosecond()%10) * time.Second)
75+
entrega(3)
76+
}

0 commit comments

Comments
 (0)