Skip to content

Commit f18c397

Browse files
authored
Merge pull request mouredev#3809 from ASJordi/main
#21 - Java
2 parents 9cfb4e3 + 2407925 commit f18c397

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed
+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import java.util.List;
2+
import java.util.Random;
3+
import java.util.concurrent.TimeUnit;
4+
import java.util.function.Function;
5+
6+
/**
7+
* Un callback en Java es un concepto que permite a una función llamar a otra función.
8+
* En Java los callbacks se implementan a través de interfaces.
9+
* Una interfaz de callback es una interfaz con un método que se invocará cuando se produzca un evento en particular.
10+
* Un objeto que implementa esta interfaz se registra con otro objeto, que llama al método de callback cuando ocurre el evento.
11+
*/
12+
13+
public class Main {
14+
15+
public static void main(String[] args) {
16+
System.out.println(saludar("Pedro", s -> s.toUpperCase()));
17+
procesarPedidos("Ceviche", s -> "Confirmado", s-> "Listo", s -> "Entregado");
18+
19+
}
20+
21+
/**
22+
* EJERCICIO:
23+
* Explora el concepto de callback en tu lenguaje creando un ejemplo
24+
* simple (a tu elección) que muestre su funcionamiento.
25+
* @param nombre Nombre a saludar
26+
* @param f Callback que transforma el nombre
27+
* @return Retorna un saludo con el nombre transformado por el callback f
28+
*/
29+
public static String saludar(String nombre, Function<String, String> f) {
30+
return "Hola " + f.apply(nombre) + "!";
31+
}
32+
33+
/**
34+
* DIFICULTAD EXTRA (opcional):
35+
* Crea un simulador de pedidos de un restaurante utilizando callbacks.
36+
* Estará formado por una función que procesa pedidos.
37+
* Debe aceptar el nombre del plato, una callback de confirmación, una
38+
* de listo y otra de entrega.
39+
* - Debe imprimir un confirmación cuando empiece el procesamiento.
40+
* - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre procesos.
41+
* - Debe invocar a cada callback siguiendo un orden de procesado.
42+
* - Debe notificar que el plato está listo o ha sido entregado.
43+
* @param nombre
44+
* @param fConfirmado
45+
* @param fListo
46+
* @param fEntregado
47+
*/
48+
public static void procesarPedidos(String nombre, Function<String, String> fConfirmado, Function<String, String> fListo, Function<String, String> fEntregado) {
49+
Random r = new Random();
50+
List<Function<String, String>> procesos = List.of(fConfirmado, fListo, fEntregado);
51+
System.out.println("Procesando pedido...");
52+
53+
procesos.forEach(p -> {
54+
try {
55+
int t = r.nextInt(1, 11);
56+
System.out.println("El plato " + nombre + " se encuentra " + p.apply(nombre) + " en " + t + " segundos.");
57+
TimeUnit.SECONDS.sleep(t);
58+
} catch (InterruptedException e) {
59+
throw new RuntimeException(e);
60+
}
61+
});
62+
63+
System.out.println("Pedido procesado exitosamente!");
64+
}
65+
66+
}

0 commit comments

Comments
 (0)