Skip to content

Commit 18da19b

Browse files
committed
#19 - javascript
1 parent 811b651 commit 18da19b

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
/**
2+
* TEORÍA SOBRE ENUMERACIONES EN JAVASCRIPT
3+
*
4+
* JavaScript no tiene un tipo de dato nativo para enumeraciones como Java,
5+
* pero hay varias formas de implementarlas:
6+
*
7+
* 1. Usando Object.freeze() para crear objetos inmutables
8+
* 2. Utilizando símbolos (Symbol)
9+
* 3. Creando clases con getters
10+
*
11+
* En este ejercicio, usaremos Object.freeze() para crear enumeraciones
12+
* similares a las que encontraríamos en otros lenguajes.
13+
*/
14+
15+
// Enumeración para los días de la semana
16+
const DiaSemana = Object.freeze({
17+
LUNES: 1,
18+
MARTES: 2,
19+
MIERCOLES: 3,
20+
JUEVES: 4,
21+
VIERNES: 5,
22+
SABADO: 6,
23+
DOMINGO: 7,
24+
25+
// Método para obtener el nombre del día por número
26+
obtenerNombre(numero) {
27+
const dias = Object.entries(this).find(([_, value]) => value === numero);
28+
return dias ? dias[0] : "Número inválido. Debe estar entre 1 y 7.";
29+
},
30+
});
31+
32+
// Enumeración para los estados de un pedido
33+
const EstadoPedido = Object.freeze({
34+
PENDIENTE: "PENDIENTE",
35+
ENVIADO: "ENVIADO",
36+
ENTREGADO: "ENTREGADO",
37+
CANCELADO: "CANCELADO",
38+
});
39+
40+
// Clase para gestionar pedidos
41+
class Pedido {
42+
constructor(id) {
43+
this.id = id;
44+
this.estado = EstadoPedido.PENDIENTE;
45+
}
46+
47+
// Método para enviar el pedido
48+
enviarPedido() {
49+
if (this.estado === EstadoPedido.PENDIENTE) {
50+
this.estado = EstadoPedido.ENVIADO;
51+
return true;
52+
}
53+
return false;
54+
}
55+
56+
// Método para cancelar el pedido
57+
cancelarPedido() {
58+
if (
59+
this.estado === EstadoPedido.PENDIENTE ||
60+
this.estado === EstadoPedido.ENVIADO
61+
) {
62+
this.estado = EstadoPedido.CANCELADO;
63+
return true;
64+
}
65+
return false;
66+
}
67+
68+
// Método para entregar el pedido
69+
entregarPedido() {
70+
if (this.estado === EstadoPedido.ENVIADO) {
71+
this.estado = EstadoPedido.ENTREGADO;
72+
return true;
73+
}
74+
return false;
75+
}
76+
77+
// Método para obtener descripción del estado
78+
obtenerDescripcionEstado() {
79+
switch (this.estado) {
80+
case EstadoPedido.PENDIENTE:
81+
return `El pedido ${this.id} está pendiente de envío.`;
82+
case EstadoPedido.ENVIADO:
83+
return `El pedido ${this.id} ha sido enviado y está en camino.`;
84+
case EstadoPedido.ENTREGADO:
85+
return `El pedido ${this.id} ha sido entregado con éxito.`;
86+
case EstadoPedido.CANCELADO:
87+
return `El pedido ${this.id} ha sido cancelado.`;
88+
}
89+
}
90+
}
91+
92+
// Función principal para probar la funcionalidad
93+
function main() {
94+
console.log("=== PRUEBA DE DÍAS DE LA SEMANA ===");
95+
for (let i = 1; i <= 7; i++) {
96+
console.log(`Día ${i}: ${DiaSemana.obtenerNombre(i)}`);
97+
}
98+
99+
console.log("\n=== PRUEBA DE GESTIÓN DE PEDIDOS ===");
100+
101+
const pedido1 = new Pedido(1);
102+
const pedido2 = new Pedido(2);
103+
104+
// Mostrar estado inicial
105+
console.log(pedido1.obtenerDescripcionEstado());
106+
107+
// Enviar pedido1
108+
pedido1.enviarPedido();
109+
console.log(pedido1.obtenerDescripcionEstado());
110+
111+
// Intentar entregar pedido2 (debería fallar)
112+
if (!pedido2.entregarPedido()) {
113+
console.log("No se puede entregar el pedido 2 porque no ha sido enviado.");
114+
}
115+
116+
// Entregar pedido1
117+
pedido1.entregarPedido();
118+
console.log(pedido1.obtenerDescripcionEstado());
119+
120+
// Cancelar pedido2
121+
pedido2.cancelarPedido();
122+
console.log(pedido2.obtenerDescripcionEstado());
123+
}
124+
125+
// Ejecutar el programa
126+
main();

0 commit comments

Comments
 (0)