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 ifs.

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.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto