Skip to content

Commit 5ca1888

Browse files
authored
Merge pull request mouredev#7761 from wapastorv/main
#19 - Javascript
2 parents 8cf8527 + beeb6e8 commit 5ca1888

File tree

2 files changed

+242
-74
lines changed

2 files changed

+242
-74
lines changed

Roadmap/19 - ENUMERACIONES/javascript/wapastor.js

Lines changed: 0 additions & 74 deletions
This file was deleted.
Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,242 @@
1+
// ENUMS en JavaScript
2+
/*
3+
Los enums en JavaScript son una forma de crear un conjunto de constantes que pueden ser utilizadas en cualquier parte de nuestro código.
4+
los enumeradores (enums) no existen como una característica nativa del lenguaje, pero podemos simularlos utilizando objetos o técnicas específicas.
5+
6+
¿Cómo crear un ENUM en JavaScript?
7+
En JavaScript, los ENUM se pueden implementar de varias formas. Aquí te muestro las más comunes:
8+
9+
1. Usando un objeto:
10+
La forma más sencilla de crear un ENUM es utilizando un objeto donde las claves son los nombres de las constantes y los valores son los valores asociados.
11+
Por ejemplo:
12+
*/
13+
const DaysOfWeek = {
14+
MONDAY: 'Monday',
15+
TUESDAY: 'Tuesday',
16+
WEDNESDAY: 'Wednesday',
17+
THURSDAY: 'Thursday',
18+
FRIDAY: 'Friday',
19+
SATURDAY: 'Saturday',
20+
SUNDAY: 'Sunday',
21+
};
22+
23+
console.log(DaysOfWeek.MONDAY);
24+
console.log(DaysOfWeek.TUESDAY);
25+
26+
/*
27+
2. Usando Object.freeze():
28+
Para evitar que el objeto sea modificado accidentalmente, puedes usar Object.freeze. Esto hace que el objeto sea inmutable.
29+
*/
30+
const DaysOfWeek2 = Object.freeze({
31+
MONDAY: 'Monday',
32+
TUESDAY: 'Tuesday',
33+
WEDNESDAY: 'Wednesday',
34+
THURSDAY: 'Thursday',
35+
FRIDAY: 'Friday',
36+
SATURDAY: 'Saturday',
37+
SUNDAY: 'Sunday',
38+
});
39+
DaysOfWeek2.MONDAY = 'New Day'; // Esto no tendrá efecto
40+
console.log(DaysOfWeek2.MONDAY); // Output: Monday
41+
/*
42+
3. Usando Symbol para mayor seguridad
43+
Los símbolos son únicos y pueden ser útiles para evitar colisiones de nombres.
44+
*/
45+
const Colors = Object.freeze({
46+
RED: Symbol('red'),
47+
GREEN: Symbol('green'),
48+
BLUE: Symbol('blue'),
49+
});
50+
51+
console.log(Colors.RED);
52+
console.log(Colors.RED.description); // Output: red
53+
54+
/*
55+
4. Usando map:
56+
Un Map permite asignar valores personalizados sin perder flexibilidad
57+
*/
58+
const UserRole = new Map([
59+
["ADMIN", { level: 3, canEdit: true, canDelete: true }],
60+
["EDITOR", { level: 2, canEdit: true, canDelete: false }],
61+
["USER", { level: 1, canEdit: false, canDelete: false }]
62+
]);
63+
64+
// ✅ Uso del Enum
65+
console.log(UserRole.get("EDITOR")); // { level: 2, canEdit: true, canDelete: false }
66+
console.log(UserRole.get("USER").canEdit); // false
67+
68+
69+
/*
70+
* EJERCICIO:
71+
* Empleando tu lenguaje, explora la definición del tipo de dato
72+
* que sirva para definir enumeraciones (Enum).
73+
* Crea un Enum que represente los días de la semana del lunes
74+
* al domingo, en ese orden. Con ese enumerado, crea una operación
75+
* que muestre el nombre del día de la semana dependiendo del número entero
76+
* utilizado (del 1 al 7).
77+
*/
78+
79+
// Definimos un objeto con las constantes que necesitamos
80+
const diasDeLaSemana = {
81+
LUNES: 1,
82+
MARTES: 2,
83+
MIERCOLES: 3,
84+
JUEVES: 4,
85+
VIERNES: 5,
86+
SABADO: 6,
87+
DOMINGO: 7
88+
};
89+
90+
// Utilizamos las constantes en nuestro código, por ejemplo:
91+
92+
let dia = diasDeLaSemana.LUNES;
93+
console.log(dia); // 1
94+
95+
// Podemos utilizar un switch para hacer algo diferente dependiendo del valor de la constante:
96+
switch (dia) {
97+
case diasDeLaSemana.LUNES:
98+
console.log('Hoy es Lunes');
99+
break;
100+
case diasDeLaSemana.MARTES:
101+
console.log('Hoy es Martes');
102+
break;
103+
case diasDeLaSemana.MIERCOLES:
104+
console.log('Hoy es Miércoles');
105+
break;
106+
case diasDeLaSemana.JUEVES:
107+
console.log('Hoy es Jueves');
108+
break;
109+
case diasDeLaSemana.VIERNES:
110+
console.log('Hoy es Viernes');
111+
break;
112+
case diasDeLaSemana.SABADO:
113+
console.log('Hoy es Sábado');
114+
break;
115+
case diasDeLaSemana.DOMINGO:
116+
console.log('Hoy es Domingo');
117+
break;
118+
default:
119+
console.log('Día no válido');
120+
}
121+
122+
// Podemos hacer un bucle para recorrer todas las constantes:
123+
for (let dia in diasDeLaSemana) {
124+
console.log(diasDeLaSemana[dia]);
125+
}
126+
127+
// Podemos obtener el nombre de la constante a partir de su valor:
128+
function getDia(dia) {
129+
for (let d in diasDeLaSemana) {
130+
if (diasDeLaSemana[d] === dia) {
131+
return d;
132+
}
133+
}
134+
return null;
135+
}
136+
137+
console.log(getDia(1)); // LUNES
138+
139+
function obtenerNombreDelDia(valor){
140+
const clave = Object.keys(diasDeLaSemana).find(key => diasDeLaSemana[key] === valor);
141+
142+
return clave || 'No existe';
143+
}
144+
145+
console.log(obtenerNombreDelDia(1)); // LUNES
146+
console.log(obtenerNombreDelDia(8)); // No existe
147+
148+
149+
/* DIFICULTAD EXTRA (opcional):
150+
* Crea un pequeño sistema de gestión del estado de pedidos.
151+
* Implementa una clase que defina un pedido con las siguientes características:
152+
* - El pedido tiene un identificador y un estado.
153+
* - El estado es un Enum con estos valores: PENDIENTE, ENVIADO, ENTREGADO y CANCELADO.
154+
* - Implementa las funciones que sirvan para modificar el estado:
155+
* - Pedido enviado
156+
* - Pedido cancelado
157+
* - Pedido entregado
158+
* (Establece una lógica, por ejemplo, no se puede entregar si no se ha enviado, etc...)
159+
* - Implementa una función para mostrar un texto descriptivo según el estado actual.
160+
* - Crea diferentes pedidos y muestra cómo se interactúa con ellos.
161+
*/
162+
163+
const estadosPedido = {
164+
PENDIENTE: 1,
165+
ENVIADO: 2,
166+
ENTREGADO: 3,
167+
CANCELADO: 4
168+
}
169+
170+
class Pedido {
171+
172+
constructor(id){
173+
this.id = id;
174+
this.estado = estadosPedido.PENDIENTE;
175+
}
176+
177+
pedidoEnviado(){
178+
if(this.estado === estadosPedido.PENDIENTE){
179+
this.estado = estadosPedido.ENVIADO;
180+
}
181+
else{
182+
console.log('El pedido no se puede enviar, ya ha sido enviado o cancelado');
183+
}
184+
}
185+
186+
pedidoEntregado(){
187+
if(this.estado === estadosPedido.ENVIADO){
188+
this.estado = estadosPedido.ENTREGADO;
189+
}
190+
else{
191+
console.log('El pedido no se puede entregar, no ha sido enviado');
192+
}
193+
}
194+
195+
pedidoCancelado(){
196+
if(this.estado != estadosPedido.ENTREGADO){
197+
this.estado = estadosPedido.CANCELADO;
198+
}
199+
else{
200+
console.log('El pedido no se puede cancelar ya se entrego');
201+
}
202+
}
203+
204+
mostrarEstado(){
205+
let mensaje = '';
206+
switch (this.estado) {
207+
case estadosPedido.PENDIENTE:
208+
mensaje = `El pedido ${this.id} está pendiente`;
209+
break;
210+
case estadosPedido.ENVIADO:
211+
mensaje = `El pedido ${this.id} ha sido enviado`;
212+
break;
213+
case estadosPedido.ENTREGADO:
214+
mensaje = `El pedido ${this.id} ha sido entregado`;
215+
break;
216+
case estadosPedido.CANCELADO:
217+
mensaje = `El pedido ${this.id} ha sido cancelado`;
218+
break;
219+
default:
220+
mensaje = 'Estado no válido';
221+
}
222+
console.log(mensaje);
223+
}
224+
}
225+
226+
const pedido1 = new Pedido(1);
227+
pedido1.mostrarEstado();
228+
pedido1.pedidoEnviado();
229+
pedido1.mostrarEstado();
230+
pedido1.pedidoCancelado();
231+
pedido1.mostrarEstado();
232+
pedido1.pedidoEntregado();
233+
pedido1.mostrarEstado();
234+
console.log('-------------------------');
235+
const pedido2 = new Pedido(2);
236+
pedido2.mostrarEstado();
237+
pedido2.pedidoEntregado();
238+
pedido2.mostrarEstado();
239+
pedido2.pedidoCancelado();
240+
pedido2.mostrarEstado();
241+
pedido2.pedidoEnviado();
242+
pedido2.mostrarEstado();

0 commit comments

Comments
 (0)