En este post veremos la solución a un ejercicio sencillo de JavaScript. Se trata de crear una función que regrese “amarillo”, “rojo”, o “verde” dependiendo del argumento que reciba indicando la luz encendida actualmente.
La función va a indicar cuál es la luz que debería encender de acuerdo a la que está encendida actualmente.
Si la luz es “rojo” entonces debe mostrar “verde”, si es “verde” debe mostrar “amarillo” y finalmente si es “amarillo” debe mostrar “rojo”.
Por cierto, este es un ejercicio de Codewars.
Semáforo con JavaScript
La función es sencilla y se puede resolver usando if. Veamos la definición de la función:
const actualizarSemaforo = (colorActual) => {
if (colorActual === "amarillo") return "rojo";
if (colorActual === "rojo") return "verde";
if (colorActual === "verde") return "amarillo";
}
// Probar
const colores = [
"amarillo", "rojo", "verde"
];
colores.forEach(color => {
console.log(`Para ${color} la siguiente luz debe ser: ${actualizarSemaforo(color)}`)
});
Son 3 if que regresan el color dependiendo del actual.
Esta solución tiene alternativas; por ejemplo, usando el operador ternario o switch.
Otra versión usando hashmap
En estructura de datos un hashmap es un diccionario que tiene claves y valores. Al consultar una clave, regresa el valor asociado con esa clave.
Un hashmap o diccionario en JavaScript es un simple objeto. Como la luz actual cambia únicamente a un valor podemos definir un diccionario:
const diccionario = {
verde: "amarillo",
amarillo: "rojo",
rojo: "verde",
};
Cada valor tiene su equivalente. Si accedemos a diccionario["amarillo"]
devolverá "rojo"
y lo mismo para otros valores, así que basta con regresar diccionario[valor] y nos ahorramos if
s.
Combinándolo con las funciones flecha podemos hacer una función más corta que queda así:
const actualizarSemaforo = colorActual => ({
verde: "amarillo",
amarillo: "rojo",
rojo: "verde",
}[colorActual])
// Probar
const colores = [
"amarillo", "rojo", "verde"
];
colores.forEach(color => {
console.log(`Para ${color} la siguiente luz debe ser: ${actualizarSemaforo(color)}`)
});
Los hashmap sirven para muchas cosas más, y son extremadamente rápidos, pues su tiempo de acceso es constante y no necesitamos andar buscando la clave, eso sí, debemos programar de tal manera que se pueda saber la clave de lo que necesitamos.