Javascript Logo
en español

10 trucos para reducir la complejidad de tu código

Medio
-
4 min. lectura

JavaScript es un lenguaje de programación popular y versátil, pero a veces puede ser fácil escribir código que sea demasiado complicado y difícil de mantener. En este artículo, te presento 10 consejos para ayudarte a simplificar y reducir la complejidad de tu código en JavaScript.

Divide el código en funciones pequeñas y específicas

Las funciones pequeñas y específicas son más fáciles de entender y mantener que las funciones grandes y complejas. Trata de dividir una función grande en varias funciones más pequeñas y que cada una de estas funciones se encargue de una tarea específica. Por ejemplo:

Por ejemplo, imagína el siguiente código:

function getAgeDescription(age) {
  return age < 18 ? "menor de edad" : "mayor de edad";
}

function getStudentDescription(isStudent) {
  return isStudent ? "es estudiante" : "no es estudiante";
}

function getJobDescription(hasPartTimeJob) {
  return hasPartTimeJob ? "tiene trabajo a tiempo parcial" : "no tiene trabajo a tiempo parcial";
}

function getUserDescription(user) {
  return `${getAgeDescription(user.age)}, ${getStudentDescription(user.isStudent)}, ${getJobDescription(user.hasPartTimeJob)}`;
}

Como podrás observar, tenemos varios condicionales. Podríamos mejorar esta código añadiendo funciones que nos indiquen la intencionalidad de nuestro código y por ello, que éste sea más legible.

2. Usa constantes en lugar de valores mágicos.

Los valores mágicos son valores hardcoded que no tienen un nombre o contexto claro en el código. En su lugar, es mejor usar constantes con nombres descriptivos que describan su propósito. Por ejemplo:

const DISCOUNT_TYPE_1 = 1;
const DISCOUNT_AMOUNT_1 = 2;

function getDiscount(price, type) {
  if (type === DISCOUNT_TYPE_1) {
    return price * DISCOUNT_AMOUNT_1;
  } else {
    return 0;
  }
}

3. Evita las funciones anidadas y usa closures en su lugar.

Las funciones anidadas pueden hacer que el código sea más complicado y difícil de leer. En su lugar, es mejor usar closures para mantener una referencia a una función externa y tener acceso a su scope.

Ejemplo con funciones anidadas:

function getDiscount(price) {
  let discount = 0;
  
  function checkMembership() {
    if (membership === "premium") {
      discount = 0.15;
    } else {
      discount = 0.1;
    }
  }
  
  checkMembership();
  
  return price * discount;
}

Con clousures:

function getDiscount(price) {
  let discount = 0;
  
  return function(membership) {
    if (membership === "premium") {
      discount = 0.15;
    } else {
      discount = 0.1;
    }
    
    return price * discount;
  }
}

const calculateDiscount = getDiscount(100);

calculateDiscount("regular"); // 10
calculateDiscount("premium"); // 15

En este ejemplo, la función getDiscount devuelve una función anónima que tiene acceso a discount y price. La función devuelta toma un parámetro membership que se utiliza para actualizar el valor de discount. La función devuelta también devuelve el precio con el descuento aplicado. Al llamar a getDiscount con un precio, se crea una nueva instancia de la función anónima con su propio scope para discount y price. Después, se puede llamar a la función devuelta con diferentes valores de membership para obtener diferentes descuentos.

4. Usa destructuración para acceder a valores de objetos y arrays de manera más clara y concisa.

La destructuración en JavaScript permite acceder a los valores de objetos y arrays de una manera más clara y concisa.

const person = {
  firstName: "John",
  lastName: "Doe",
  age: 30
};

const { firstName, lastName, age } = person;

5. Usa el operador spread para mezclar objetos y arrays

El operador spread en JavaScript permite mezclar objetos y arrays de una manera más sencilla y clara.

const array1 = [1, 2, 3];
const array2 = [4, 5, 6];
const combinedArray = [...array1, ...array2]; // [1, 2, 3, 4, 5, 6]

const object1 = { a: 1, b: 2 };
const object2 = { c: 3, d: 4 };
const combinedObject = { ...object1, ...object2 }; // { a: 1, b: 2, c: 3, d: 4 }

6. Usa arrow functions para escribir funciones de manera más clara y concisa.

Las arrow functions son una forma concisa y clara de escribir funciones en JavaScript. En vez de esto:

const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = [];

numbers.forEach(function(number) {
  doubledNumbers.push(number * 2);
});

Haz esto:

const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map(number => number * 2);

7. Usa módulos para organizar y reutilizar código de manera más clara y eficiente.

Los módulos en JavaScript permiten organizar y reutilizar código en lugar de tener que escribir código repetitivo

Archivo math.js:

export function sum(a, b) {
  return a + b;
}

export function subtract(a, b) {
  return a - b;
}

Archivo index.js:

import { sum, subtract } from './math.js';

console.log(sum(1, 2)); // 3
console.log(subtract(5, 2)); // 3

8. Usa destructuración de objetos y arreglos para acceder a valores de manera más clara y concisa.

La destructuración de objetos y arreglos en JavaScript permite acceder a valores de manera más clara.

Antes:

const person = { firstName: "John", lastName: "Doe", age: 30 };
const firstName = person.firstName;
const lastName = person.lastName;
const age = person.age;

Con destructuración:

const person = { firstName: "John", lastName: "Doe", age: 30 };
const { firstName, lastName, age } = person;

9. Usa operadores ternarios para simplificar condicionales simples

En algunos casos, puede ser útil usar un operador ternario en lugar de un condicional if/else.

Con un condicional if/else:

function checkAge(age) {
  if (age >= 18) {
    return "mayor de edad";
  } else {
    return "menor de edad";
  }
}

Con un operador ternario:

function checkAge(age) {
  return age >= 18 ? "mayor de edad" : "menor de edad";
}

10. Refactoriza y optimiza tu código regularmente.

Por último, pero no menos importante, es importante refactorizar y optimizar tu código regularmente. Esto te permitirá mantener el código limpio y eficiente, y prevenir la acumulación de código complejo e innecesario. Haz una revisión regular de tu código y considera si puedes eliminar o simplificar cualquier código que ya no sea necesario, o si puedes reorganizar el código para hacerlo más fácil de leer y mantener.