Skip to content

Commit b6a0589

Browse files
authored
Merge pull request mouredev#6540 from eulogioep/main
#21 - java, javascript, php y typescript
2 parents 999a148 + 479d707 commit b6a0589

File tree

4 files changed

+385
-0
lines changed

4 files changed

+385
-0
lines changed
+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*
2+
* TEORÍA DE CALLBACKS:
3+
*
4+
* Un callback es una función que se pasa como argumento a otra función y se ejecuta
5+
* después de que ocurra un evento específico o se complete una tarea. En Java, los
6+
* callbacks se implementan típicamente usando interfaces funcionales o lambdas.
7+
*
8+
* Los callbacks son útiles para:
9+
* 1. Programación asíncrona
10+
* 2. Manejo de eventos
11+
* 3. Personalización de comportamiento
12+
*
13+
* En Java, podemos implementar callbacks de varias formas:
14+
* 1. Interfaces funcionales
15+
* 2. Expresiones lambda
16+
* 3. Referencias a métodos
17+
*/
18+
19+
import java.util.Random;
20+
import java.util.concurrent.TimeUnit;
21+
22+
public class eulogioep {
23+
24+
// Interfaces funcionales para los callbacks
25+
@FunctionalInterface
26+
interface SimpleCallback {
27+
void execute();
28+
}
29+
30+
@FunctionalInterface
31+
interface StringCallback {
32+
void execute(String message);
33+
}
34+
35+
// Ejemplo simple de callback
36+
public static void procesarTarea(String tarea, SimpleCallback onComplete) {
37+
System.out.println("Iniciando tarea: " + tarea);
38+
// Simulamos algún procesamiento
39+
try {
40+
Thread.sleep(1000);
41+
} catch (InterruptedException e) {
42+
e.printStackTrace();
43+
}
44+
45+
// Ejecutamos el callback
46+
onComplete.execute();
47+
}
48+
49+
// Simulador de pedidos de restaurante
50+
public static class RestaurantePedidos {
51+
private Random random = new Random();
52+
53+
public void procesarPedido(
54+
String plato,
55+
StringCallback onConfirmacion,
56+
StringCallback onListo,
57+
StringCallback onEntrega
58+
) {
59+
// Callback de confirmación
60+
onConfirmacion.execute("Pedido confirmado: " + plato);
61+
62+
// Simular preparación
63+
simularTiempo();
64+
65+
// Callback de listo
66+
onListo.execute("¡" + plato + " está listo!");
67+
68+
// Simular entrega
69+
simularTiempo();
70+
71+
// Callback de entrega
72+
onEntrega.execute(plato + " ha sido entregado. ¡Buen provecho!");
73+
}
74+
75+
private void simularTiempo() {
76+
try {
77+
int tiempoEspera = random.nextInt(10) + 1;
78+
System.out.println("Procesando... (" + tiempoEspera + " segundos)");
79+
TimeUnit.SECONDS.sleep(tiempoEspera);
80+
} catch (InterruptedException e) {
81+
e.printStackTrace();
82+
}
83+
}
84+
}
85+
86+
public static void main(String[] args) {
87+
// Ejemplo simple de callback
88+
System.out.println("=== Ejemplo Simple de Callback ===");
89+
procesarTarea("Tarea de prueba", () ->
90+
System.out.println("¡Tarea completada!")
91+
);
92+
93+
System.out.println("\n=== Simulador de Restaurante ===");
94+
RestaurantePedidos restaurante = new RestaurantePedidos();
95+
96+
// Procesamos un pedido usando el simulador
97+
restaurante.procesarPedido(
98+
"Paella Valenciana",
99+
mensaje -> System.out.println("CONFIRMACIÓN: " + mensaje),
100+
mensaje -> System.out.println("LISTO: " + mensaje),
101+
mensaje -> System.out.println("ENTREGA: " + mensaje)
102+
);
103+
}
104+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
/*
2+
* TEORÍA DE CALLBACKS EN JAVASCRIPT:
3+
*
4+
* Un callback es una función que se pasa como argumento a otra función y se ejecuta
5+
* después de que ocurra un evento específico o se complete una tarea. En JavaScript,
6+
* los callbacks son muy comunes debido a su naturaleza asíncrona.
7+
*
8+
* Los callbacks son fundamentales en JavaScript para:
9+
* 1. Manejar operaciones asíncronas
10+
* 2. Event handling (manejo de eventos)
11+
* 3. Funciones de orden superior
12+
*
13+
* En JavaScript, los callbacks pueden ser:
14+
* 1. Funciones anónimas
15+
* 2. Funciones flecha
16+
* 3. Referencias a funciones nombradas
17+
*/
18+
19+
// Ejemplo simple de callback
20+
function procesarTarea(tarea, callback) {
21+
console.log(`Iniciando tarea: ${tarea}`);
22+
23+
// Simulamos un proceso asíncrono con setTimeout
24+
setTimeout(() => {
25+
callback();
26+
}, 1000);
27+
}
28+
29+
// Ejemplo de uso simple
30+
console.log("=== Ejemplo Simple de Callback ===");
31+
procesarTarea("Tarea de prueba", () => {
32+
console.log("¡Tarea completada!");
33+
});
34+
35+
// Simulador de pedidos de restaurante
36+
class RestaurantePedidos {
37+
procesarPedido(plato, onConfirmacion, onListo, onEntrega) {
38+
console.log("\n=== Simulador de Restaurante ===");
39+
40+
// Callback de confirmación
41+
onConfirmacion(`Pedido confirmado: ${plato}`);
42+
43+
// Simular preparación
44+
const tiempoPreparacion = this.#tiempoAleatorio();
45+
console.log(`Preparando... (${tiempoPreparacion} segundos)`);
46+
47+
setTimeout(() => {
48+
// Callback de listo
49+
onListo(${plato} está listo!`);
50+
51+
// Simular entrega
52+
const tiempoEntrega = this.#tiempoAleatorio();
53+
console.log(`Llevando a la mesa... (${tiempoEntrega} segundos)`);
54+
55+
setTimeout(() => {
56+
// Callback de entrega
57+
onEntrega(`${plato} ha sido entregado. ¡Buen provecho!`);
58+
}, tiempoEntrega * 1000);
59+
}, tiempoPreparacion * 1000);
60+
}
61+
62+
// Método privado para generar tiempo aleatorio
63+
#tiempoAleatorio() {
64+
return Math.floor(Math.random() * 10) + 1;
65+
}
66+
}
67+
68+
// Crear instancia del restaurante
69+
const restaurante = new RestaurantePedidos();
70+
71+
// Procesar un pedido
72+
restaurante.procesarPedido(
73+
"Paella Valenciana",
74+
(mensaje) => console.log(`CONFIRMACIÓN: ${mensaje}`),
75+
(mensaje) => console.log(`LISTO: ${mensaje}`),
76+
(mensaje) => console.log(`ENTREGA: ${mensaje}`)
77+
);
78+
79+
// Para evitar que el programa termine antes de que se completen los callbacks
80+
console.log("Esperando a que se procese el pedido...");
+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?php
2+
/*
3+
* TEORÍA DE CALLBACKS EN PHP:
4+
*
5+
* Un callback en PHP es una función que se pasa como argumento a otra función
6+
* para ser ejecutada más tarde. PHP ofrece varias formas de implementar callbacks:
7+
*
8+
* 1. Funciones anónimas (closures)
9+
* 2. Arrays callable ([objeto/clase, método])
10+
* 3. Strings con nombres de funciones
11+
* 4. Arrow functions (PHP 7.4+)
12+
*
13+
* Los callbacks son útiles para:
14+
* 1. Personalizar el comportamiento de funciones
15+
* 2. Implementar patrones de diseño como Observer
16+
* 3. Manejar eventos y procesamiento asíncrono (en la medida que PHP lo permite)
17+
*/
18+
19+
// Función de utilidad para simular espera
20+
function simularEspera() {
21+
$segundos = rand(1, 10);
22+
echo "Procesando... ({$segundos} segundos)\n";
23+
sleep($segundos);
24+
}
25+
26+
// Ejemplo simple de callback
27+
function procesarTarea(string $tarea, callable $callback): void {
28+
echo "Iniciando tarea: {$tarea}\n";
29+
30+
// Simulamos algún procesamiento
31+
sleep(1);
32+
33+
// Ejecutamos el callback
34+
$callback();
35+
}
36+
37+
// Clase para el simulador de restaurante
38+
class RestaurantePedidos {
39+
public function procesarPedido(
40+
string $plato,
41+
callable $onConfirmacion,
42+
callable $onListo,
43+
callable $onEntrega
44+
): void {
45+
// Callback de confirmación
46+
$onConfirmacion("Pedido confirmado: {$plato}");
47+
48+
// Simular preparación
49+
simularEspera();
50+
51+
// Callback de listo
52+
$onListo("¡{$plato} está listo!");
53+
54+
// Simular entrega
55+
simularEspera();
56+
57+
// Callback de entrega
58+
$onEntrega("{$plato} ha sido entregado. ¡Buen provecho!");
59+
}
60+
}
61+
62+
// Función principal para ejecutar los ejemplos
63+
function main(): void {
64+
echo "=== Ejemplo Simple de Callback ===\n";
65+
66+
// Ejemplo usando una función anónima
67+
procesarTarea("Tarea de prueba", function() {
68+
echo "¡Tarea completada!\n";
69+
});
70+
71+
echo "\n=== Simulador de Restaurante ===\n";
72+
73+
$restaurante = new RestaurantePedidos();
74+
75+
// Procesamos un pedido usando el simulador
76+
$restaurante->procesarPedido(
77+
"Paella Valenciana",
78+
// Callback de confirmación - usando arrow function (PHP 7.4+)
79+
fn($mensaje) => echo "CONFIRMACIÓN: {$mensaje}\n",
80+
// Callback de listo - usando función anónima tradicional
81+
function($mensaje) {
82+
echo "LISTO: {$mensaje}\n";
83+
},
84+
// Callback de entrega - también usando función anónima
85+
function($mensaje) {
86+
echo "ENTREGA: {$mensaje}\n";
87+
}
88+
);
89+
}
90+
91+
// Ejecutar el programa
92+
main();
93+
94+
?>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/*
2+
* TEORÍA DE CALLBACKS EN TYPESCRIPT:
3+
*
4+
* TypeScript extiende JavaScript añadiendo tipos estáticos. Para callbacks,
5+
* esto significa que podemos definir claramente:
6+
* 1. Los tipos de los parámetros que el callback acepta
7+
* 2. El tipo de valor que el callback retorna
8+
*
9+
* Ventajas de usar callbacks en TypeScript:
10+
* 1. Mejor intellisense y autocompletado en IDEs
11+
* 2. Detección temprana de errores de tipo
12+
* 3. Documentación más clara a través de tipos
13+
* 4. Refactorización más segura
14+
*/
15+
16+
// Definición de tipos para los callbacks
17+
type SimpleCallback = () => void;
18+
type MessageCallback = (message: string) => void;
19+
20+
// Interface para estructurar los callbacks del restaurante
21+
interface RestaurantCallbacks {
22+
onConfirmation: MessageCallback;
23+
onReady: MessageCallback;
24+
onDelivery: MessageCallback;
25+
}
26+
27+
// Clase para manejar pedidos del restaurante
28+
class RestaurantOrders {
29+
// Método privado para generar tiempo aleatorio
30+
private getRandomTime(): number {
31+
return Math.floor(Math.random() * 10) + 1;
32+
}
33+
34+
// Método para procesar un pedido
35+
public processOrder(dish: string, callbacks: RestaurantCallbacks): void {
36+
const { onConfirmation, onReady, onDelivery } = callbacks;
37+
38+
// Confirmación inmediata
39+
onConfirmation(`Order confirmed: ${dish}`);
40+
41+
// Simular preparación
42+
const prepTime = this.getRandomTime();
43+
console.log(`Preparing... (${prepTime} seconds)`);
44+
45+
setTimeout(() => {
46+
// Plato listo
47+
onReady(`${dish} is ready!`);
48+
49+
// Simular entrega
50+
const deliveryTime = this.getRandomTime();
51+
console.log(`Delivering to table... (${deliveryTime} seconds)`);
52+
53+
setTimeout(() => {
54+
// Entrega completada
55+
onDelivery(`${dish} has been delivered. Enjoy your meal!`);
56+
}, deliveryTime * 1000);
57+
}, prepTime * 1000);
58+
}
59+
}
60+
61+
// Ejemplo simple de callback
62+
function processTask(task: string, callback: SimpleCallback): void {
63+
console.log(`Starting task: ${task}`);
64+
65+
setTimeout(() => {
66+
callback();
67+
}, 1000);
68+
}
69+
70+
// Función principal asíncrona
71+
async function main() {
72+
console.log("=== Simple Callback Example ===");
73+
74+
// Ejemplo simple usando Promise para manejar el callback
75+
await new Promise<void>((resolve) => {
76+
processTask("Test task", () => {
77+
console.log("Task completed!");
78+
resolve();
79+
});
80+
});
81+
82+
console.log("\n=== Restaurant Simulator ===");
83+
84+
const restaurant = new RestaurantOrders();
85+
86+
// Creamos un Promise que se resolverá cuando se complete todo el proceso
87+
await new Promise<void>((resolve) => {
88+
restaurant.processOrder("Paella Valenciana", {
89+
onConfirmation: (message: string) => {
90+
console.log(`CONFIRMATION: ${message}`);
91+
},
92+
onReady: (message: string) => {
93+
console.log(`READY: ${message}`);
94+
},
95+
onDelivery: (message: string) => {
96+
console.log(`DELIVERY: ${message}`);
97+
resolve(); // Resolvemos el Promise cuando se complete la entrega
98+
},
99+
});
100+
});
101+
}
102+
103+
// Ejecutar el programa principal
104+
console.log("Starting the program...");
105+
main().then(() => {
106+
console.log("\nProgram completed successfully!");
107+
});

0 commit comments

Comments
 (0)