1
+ """
2
+ * EJERCICIO:
3
+ * Explora el concepto de callback en tu lenguaje creando un ejemplo
4
+ * simple (a tu elección) que muestre su funcionamiento.
5
+ *
6
+ * DIFICULTAD EXTRA (opcional):
7
+ * Crea un simulador de pedidos de un restaurante utilizando callbacks.
8
+ * Estará formado por una función que procesa pedidos.
9
+ * Debe aceptar el nombre del plato, una callback de confirmación, una
10
+ * de listo y otra de entrega.
11
+ * - Debe imprimir un confirmación cuando empiece el procesamiento.
12
+ * - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre
13
+ * procesos.
14
+ * - Debe invocar a cada callback siguiendo un orden de procesado.
15
+ * - Debe notificar que el plato está listo o ha sido entregado.
16
+ """
17
+ import random
18
+ import time
19
+ import threading # Se usa para trabajar con hilos
20
+
21
+ def saludo (nombre :str ):
22
+ print ('Ejecutando el proceso de saludar' )
23
+ print (f'Hola { nombre } !!' )
24
+
25
+ def saludar (nombre :str , callback ): # Callback, función que recibe como parámetro otra función
26
+ print ('Llamando al proceso de saludar' )
27
+ callback (nombre )
28
+
29
+ saludar ('Luis' ,saludo ) # Se llama a la función saludar, que recibe el callback
30
+
31
+ # EXTRA
32
+ def procesarPedido (comida :str , confirmar_callback , listo_callback , entregado_callback ):
33
+ def procesar (): # Creamos esta función recursiva para ejecutar el hilo. Ejecución multihilo
34
+ print (f'Comenzando el proceso de preparación de { comida } ' )
35
+ time .sleep (random .randint (1 , 10 )) # Paramos entre 1 y 10 segundos la ejecución
36
+ confirmar_callback (comida )
37
+ time .sleep (random .randint (1 , 10 ))
38
+ listo_callback (comida )
39
+ time .sleep (random .randint (1 , 10 ))
40
+ entregado_callback (comida )
41
+ threading .Thread (target = procesar ).start () #Ejecutamos el hilo
42
+
43
+ def confirmarPedido (comida :str ):
44
+ print (f'Pedido { comida } confirmado!!!' )
45
+
46
+ def listoPedido (comida :str ):
47
+ print (f'Pedido { comida } listo para enviar!!!' )
48
+
49
+ def entregadoPedido (comida :str ):
50
+ print (f'Pedido { comida } ha sido entregado!!!' )
51
+
52
+ procesarPedido ('Churrasco' , confirmarPedido , listoPedido , entregadoPedido )
53
+ procesarPedido ('Callos' , confirmarPedido , listoPedido , entregadoPedido )
54
+ procesarPedido ('Carne asada' , confirmarPedido , listoPedido , entregadoPedido )
55
+ procesarPedido ('Tortilla de patatas con cebolla' , confirmarPedido , listoPedido , entregadoPedido )
0 commit comments