Saltar al contenido

Si las declaraciones: ¿Realmente las necesitas en tu código?

Una declaración «if» le permite a su programa saber si debe o no ejecutar un bloque de código. La bifurcación basada en la comparación es un componente central de la programación. El concepto de un bloque de if-else o switch existe en casi todos los lenguajes de programación. Aunque no hay nada realmente malo en usar las sentencias if, puede ayudar a evitarlas cuando sea posible.

¿Por qué, podría preguntarse? Programar sin si las declaraciones te desafía a pensar fuera de la caja. Tendrás que aprender otras formas de estructurar tu código, lo que puede hacerlo más legible. Además, puede ayudarte a sentirte más cómodo con soluciones basadas en datos y/o orientadas a objetos.

Si las declaraciones: ¿Realmente las necesitas en tu código?
Si las declaraciones: ¿Realmente las necesitas en tu código?

Por supuesto, escribir sin si las declaraciones no siempre puede ser la respuesta correcta. De hecho, a veces se intenta evitar que las declaraciones de «si» hagan el código menos legible. Pero este ejercicio le ayudará a ver que hay otras maneras. Echa un vistazo a algunos ejemplos de código sin el uso de condicionales (if, switch, ternarios) para mostrarte cómo evitar las declaraciones if.

Ejemplo 1: Contar los números impares en una matriz de números:

// Ejemplo de entrada

let arrayOfNumbers = [1,4,5,9,0,-1,5];

// ***********

// En lugar de:

// ***********

dejemos que el contador1 = 0;

arrayOfNumbers.forEach(number => {

let remainder = Math.abs(number%2);

si (resto === 1) {

counter1++;

}

});

console.log(counter1);

// ***********

// ¿Qué tal:

// ***********

deja el contador2 = 0;

arrayOfNumbers.forEach(number => {

let remainder = Math.abs(number%2);

counter2 = counter2 + resto;

});

console.log(counter2);

En este ejemplo, aprovechamos el hecho de que el resultado de la operación del módulo 2 es siempre 1 (para los impares) o 0 (para los pares).

Ejemplo 2: Escriba una función que tome un argumento de objeto de fecha, y devuelva la cadena «fin de semana» o «día de la semana»

// ***********

// En lugar de:

// ***********

let weekendOrWeekday1 = inputDate => {

let day = inputDate.getDay();

si (día === 0 || día === 6) {

volver «fin de semana»;

} más {

volver «día de la semana»;

}

// O, para los fanáticos ternarios:

// retorno (día === 0 || día === 6) ? «fin de semana»: «día de la semana»;

};

console.log(weekendOrWeekday1(new Date()));

// ***********

// ¿Qué tal:

// ***********

let weekendOrWeekday2 = inputDate => {

let day = inputDate.getDay();

let labels = { 0: «fin de semana», 6: «fin de semana», por defecto: «día de la semana» };

etiquetas de retorno[día] || etiquetas[$0027por defecto$0027];

};

console.log(weekendOrWeekday2(new Date()));

¿Notó que la condición de «si» tiene algunos datos? Nos dice qué días son los fines de semana. Observaremos este patrón, extraeremos los datos presentados en la declaración if en un objeto, y usaremos eso en su lugar.

Ejemplo 3: (Un poco más avanzado) Escriba el doblador de funciones; según el tipo de entrada, hará lo siguiente:

Cuando la entrada es

  • Un número, lo dobla (es decir, 5 = …; 10, -10 = …; -20)
  • Una cuerda, repite cada letra (es decir, $0027hola$0027 = …; $0027hheelloo$0027)
  • Una función, la llama dos veces
  • Una matriz, se llama a sí misma en todos los elementos de esa matriz
  • Un objeto, se llama a sí mismo en todos los valores de ese objeto

// ***********

// En lugar de:

// ***********

dejemos el doblador1 = entrada => {

switch(tipo de entrada) {

caso «número»:

entrada de retorno + entrada;

caso «cuerda»:

return input.split($0027$0027).map(letter => letra + letra).join($0027$0027);

caso «objeto»:

Object.keys(input).map(key => input[key] = doblador1(input[key]);

entrada de retorno;

caso

console.log(doubler1({a: 5, b: $0027hola$0027}));

console.log(doubler1(function() { console.log($0027callme$0027); }));

// ***********

// ¿Qué tal:

// ***********

dejemos el doblador2 = entrada => {

let operationsByType = {

«número»: entrada => entrada + entrada,

$0027cadena$0027: input => input.split($0027$0027).map(letra => letra + letra).join($0027$0027);

$0027función$0027: input => { input(); input(); },

$0027objeto$0027: entrada => {

Object.keys(input).map(key => input[key] = doblador2(input[key]);

entrada de retorno;

}

};

operaciones de retornoPorTipo[tipo de entrada](entrada);

};

console.log(doubler2(-10));

console.log(doubler2($0027hey$0027));

console.log(doubler2([5, $0027hola$0027]));

console.log(doubler2({a: 5, b: $0027hola$0027}));

console.log(doubler2(function() { console.log($0027callme$0027); }));

Una vez más, observe cómo los datos (qué operaciones deben realizarse para qué tipo) se extrajeron todos de la instrucción switch a un objeto, y luego el objeto fue invocado con el parámetro correcto.

Ahora que has visto algunos ejemplos de codificación sin declaraciones, ¿qué piensas? Aplicado razonablemente, la programación sin declaraciones if puede hacer que tu código sea mejor. Si no hay nada más, te ayudará a ver soluciones alternativas. Y esa es una habilidad valiosa para cualquier codificador.