Skip to content

Cómo gestionar código obsoleto en Node.js con `deprecated`

Published: at 09:28 AM

Todo evoluciona y el código no es una excepción. Si has escrito o mantenido alguna vez una librería o código que usan otras personas ya sabrás que es comun que los nuevos cambios dejen obsoletas otras partes de tu código. En este artículo te explico la mejor forma de marcar como “deprecated” aquellas partes de tu codigo, de forma que tus usuarios sean concientes de ello y se muevan a utilizar las nuevas funcionalidades.

Supon que has desarrollado una libraría que ayuda a realizar ciertos cálculos y tienes una función calcularTotal que por motivos varios pasar a llamarse simplemente calcular. Fácil, no? cambias el nombre y listo. No, en la vida real, donde tu librería ya ha sido publicada en un repositorio y cientos de personas hacen uso de ella, la cosa no es tan simple.

Paso 1: El buen hábito de la documentación

Efectivamente, documenta tu función. Se “organizado” e indica a otros programadores que una funcion está obsoleta y, potencial, será borrada en una futura versión con la etiqueta @deprecated de JSDoc.

/**
 * @deprecated Usa 'calcular' en lugar 'calcularTotal'. Esta funcion será eliminada en próximas versions.
 * @param {number} cantidad El valor a procesar.
 * @returns {number} El resultado del cálculo antiguo.
 */
function calcularTotal(cantidad: number): number {
  return cantidad * 1.05; // 5% de impuesto
}

/**
 * @param {number} cantidad El valor a procesar.
 * @param {number} impuesto Incremento en el precio
 * @returns {number} El resultado del cálculo antiguo.
 */
function calcular(cantidad: number, impuesto: number): number {
  return cantidad * (1 + impuesto);
}

Simple y deonata preocupación por ser pulido. Gracias a la etiqueta @deprecated el editor de código (debe ser uno muy simple para que no lo haga) avisará visualmente a los usuarios que quieran usar la función obsoleta calculoTotal. Eso si, ten en cuenta que solo es un “aviso visual”, y que el editor no evita que quien quiera usarla la use.

deprecated tag

Paso 2: Informa en tiempo de ejecución

Hay otro forma de notificar a tus usuarios que una funcion ha quedado obsoleta y no hay necesidad de usen el editor para ello. Basta con usar la función nativa de Node.js util.deprecated().

¿Qué hace util.deprecated?

La funcion util.deprecated es un wrapper (debe envolver) a tu función obsoleta. De esta forma, en tiempo de ejecución, cuando util.deprecated se ejecuta hace dos cosas:

/**
 * @deprecated Usa 'calcular' en lugar 'calcularTotal'. Esta funcion será eliminada en próximas versions.
 * @param {number} cantidad El valor a procesar.
 * @returns {number} El resultado del cálculo antiguo.
 */
function _calcularTotal(cantidad: number): number {
  return cantidad * 1.05; // 5% de impuesto
}

// Creamos wrapper
export const calcularTotal = deprecated(
  _calcularTotal,
  'La función "calcularTotal" está obsoleta. Usa "calcular" en su lugar. La funcion "calcularTotal" sera eliminada en la proxima version.'
);

El resultado por consola sería algo como:

(node:21682) DeprecationWarning: La función "calcularTotal" está obsoleta. Usa "calcular" en su lugar. La funcion "calcularTotal" sera eliminada en la proxima version.
(Use `node --trace-deprecation ...` to show where the warning was created)

Conclusión

La combinación de @deprecated en la documentación y util.deprecated en el código es el estándar de oro para la migración de APIs.

Usa @deprecated para advertir al desarrollador en su editor y utilizas util.deprecated para advertir al usuario cuando su código realmente se esté ejecutando en producción o pruebas.

De esta manera, facilitas la vida de tus usuarios y mantienes tu código base listo para el futuro.


Next Post
Los 5 errores que detienen tu ascenso de middle a sernior