71. Interpretación de funciones reales utilizadas en software

71.1 Introducción

En software real no basta con saber escribir funciones. También hay que interpretarlas: entender qué reciben, qué devuelven, qué unidades usan, qué límites tienen y qué comportamiento representan.

Una función puede parecer simple en el código, pero estar expresando una regla de negocio, una fórmula física, un criterio de seguridad, una transformación gráfica o una decisión automática.

71.2 Leer una función como contrato

Una función puede interpretarse como un contrato: si se entregan ciertas entradas válidas, se obtiene una salida con significado definido.

function calcularTotal(precio, cantidad) {
  return precio * cantidad;
}

console.log(calcularTotal(120, 3));

El contrato implícito es que precio y cantidad son números, y que la salida representa un importe total.

71.3 Identificar entradas

El primer paso para interpretar una función es reconocer qué datos necesita. Los nombres de parámetros dan pistas, pero no siempre son suficientes.

function calcularEnvio(pesoKg, distanciaKm) {
  return 300 + pesoKg * 80 + distanciaKm * 5;
}

console.log(calcularEnvio(2.5, 40));

Aquí las unidades están en los nombres: kilogramos y kilómetros. Eso reduce errores de interpretación.

71.4 Identificar la salida

También hay que entender qué representa el valor devuelto. Dos funciones pueden devolver números, pero esos números pueden significar cosas muy distintas.

function porcentajeUso(usado, total) {
  return usado / total * 100;
}

const uso = porcentajeUso(64, 128);
console.log("Uso:", uso, "%");

La salida no es una fracción entre 0 y 1, sino un porcentaje entre 0 y 100.

71.5 Unidades y escalas

Muchos errores aparecen cuando una función espera una unidad y recibe otra. Una función puede usar segundos, milisegundos, metros, píxeles, porcentajes o valores normalizados.

function distancia(velocidadMetrosPorSegundo, tiempoSegundos) {
  return velocidadMetrosPorSegundo * tiempoSegundos;
}

console.log(distancia(10, 5), "metros");

Si el tiempo se pasara en milisegundos sin convertir, el resultado sería incorrecto.

71.6 Dominio válido

El dominio de una función es el conjunto de entradas que tienen sentido. En software, el dominio debe controlarse para evitar resultados inválidos.

function raizSegura(x) {
  if (x < 0) {
    return null;
  }

  return Math.sqrt(x);
}

console.log(raizSegura(25));
console.log(raizSegura(-4));

71.7 Casos límite

Los casos límite son entradas en los bordes del dominio: cero, máximo, mínimo, lista vacía, texto vacío o valores extremos.

function promedio(datos) {
  if (datos.length === 0) {
    return 0;
  }

  return datos.reduce((total, valor) => total + valor, 0) / datos.length;
}

console.log(promedio([]));
console.log(promedio([10, 20]));

Interpretar una función incluye saber qué ocurre cuando recibe entradas poco comunes.

71.8 Funciones puras

Una función pura depende solamente de sus entradas y no modifica datos externos. Esto facilita su interpretación.

function aplicarDescuento(precio, porcentaje) {
  return precio * (1 - porcentaje / 100);
}

console.log(aplicarDescuento(1000, 15));
console.log(aplicarDescuento(1000, 15));

Para la misma entrada, la salida siempre es la misma.

71.9 Funciones con estado externo

Algunas funciones dependen de valores externos. Interpretarlas requiere mirar más allá de los parámetros.

let impuesto = 21;

function precioConImpuesto(precio) {
  return precio * (1 + impuesto / 100);
}

console.log(precioConImpuesto(100));

impuesto = 10.5;
console.log(precioConImpuesto(100));

La función parece recibir solo precio, pero también depende de impuesto.

71.10 Interpretar nombres

Los nombres deben ayudar a entender intención. Una función llamada calcular dice poco; una llamada calcularInteresMensual comunica mucho más.

function calcularInteresMensual(capital, tasaAnual) {
  return capital * (tasaAnual / 100) / 12;
}

console.log(calcularInteresMensual(100000, 36));

71.11 Interpretar una función lineal

Muchas funciones reales tienen forma lineal. En software suelen usarse para tarifas, costos, escalas o conversiones.

function tarifaTaxi(km) {
  const bajadaBandera = 800;
  const precioPorKm = 250;
  return bajadaBandera + km * precioPorKm;
}

console.log(tarifaTaxi(0));
console.log(tarifaTaxi(8));

La salida crece de manera constante a medida que aumenta la distancia.

71.12 Interpretar una función por tramos

En sistemas reales, muchas reglas cambian según rangos. Esto produce funciones por tramos.

function costoEnvio(montoCompra) {
  if (montoCompra >= 50000) {
    return 0;
  }

  if (montoCompra >= 20000) {
    return 1200;
  }

  return 2500;
}

console.log(costoEnvio(15000));
console.log(costoEnvio(25000));
console.log(costoEnvio(70000));

71.13 Interpretar una función de validación

Una función de validación no calcula una magnitud, sino que responde si un dato cumple una regla.

function esContrasenaValida(texto) {
  return texto.length >= 8 && /\d/.test(texto);
}

console.log(esContrasenaValida("abc"));
console.log(esContrasenaValida("clave123"));

La salida es booleana: true o false.

71.14 Interpretar una función de normalización

Normalizar es transformar valores a una escala común. Hay que saber si la salida queda entre 0 y 1, entre 0 y 100 o en otra escala.

function normalizar(valor, minimo, maximo) {
  return (valor - minimo) / (maximo - minimo);
}

console.log(normalizar(75, 50, 100));

71.15 Interpretar una función de mapeo

Una función de mapeo convierte valores de un intervalo a otro. Es frecuente en gráficos, sensores, animaciones y controles.

function mapear(valor, minOrigen, maxOrigen, minDestino, maxDestino) {
  const proporcion = (valor - minOrigen) / (maxOrigen - minOrigen);
  return minDestino + proporcion * (maxDestino - minDestino);
}

console.log(mapear(25, 0, 100, 0, 400));

71.16 Interpretar una función de puntuación

Las funciones de puntuación combinan factores para ordenar opciones. No siempre devuelven una unidad física; a veces devuelven un valor relativo.

function puntajeBusqueda(resultado) {
  return resultado.coincidencias * 10 + resultado.popularidad * 0.5 - resultado.antiguedadDias * 0.1;
}

const resultado = { coincidencias: 4, popularidad: 80, antiguedadDias: 30 };

console.log(puntajeBusqueda(resultado));

El número sirve para comparar resultados, no necesariamente para mostrarlo al usuario.

71.17 Interpretar redondeos

El redondeo cambia la precisión de una salida. En dinero, estadísticas o mediciones, elegir mal el redondeo puede afectar el resultado final.

function redondearADosDecimales(valor) {
  return Math.round(valor * 100) / 100;
}

console.log(redondearADosDecimales(10.236));
console.log(redondearADosDecimales(10.235));

71.18 Interpretar fechas y tiempo

Las funciones que trabajan con tiempo deben aclarar si usan segundos, milisegundos, días calendario o días exactos de 24 horas.

function segundosAMilisegundos(segundos) {
  return segundos * 1000;
}

function minutosASegundos(minutos) {
  return minutos * 60;
}

console.log(segundosAMilisegundos(3));
console.log(minutosASegundos(2));

71.19 Interpretar efectos laterales

Algunas funciones no solo devuelven un valor: también modifican una variable, escriben en pantalla, guardan datos o envían información.

const historial = [];

function registrarEvento(evento) {
  historial.push(evento);
  return historial.length;
}

console.log(registrarEvento("inicio"));
console.log(registrarEvento("compra"));
console.log(historial);

Interpretar esta función exige notar que cambia el arreglo historial.

71.20 Interpretar errores

Una función real puede devolver un valor especial, lanzar un error o usar un objeto de resultado cuando algo sale mal.

function dividir(a, b) {
  if (b === 0) {
    return { ok: false, error: "No se puede dividir por cero" };
  }

  return { ok: true, valor: a / b };
}

console.log(dividir(10, 2));
console.log(dividir(10, 0));

71.21 Leer pruebas como documentación

Los ejemplos de uso y las pruebas ayudan a interpretar qué espera una función y qué debe devolver.

function esPar(numero) {
  return numero % 2 === 0;
}

console.log(esPar(4) === true);
console.log(esPar(7) === false);
console.log(esPar(0) === true);

Las pruebas muestran casos normales y casos límite.

71.22 Preguntas para interpretar una función

Al encontrar una función en un proyecto real, conviene hacerse estas preguntas:

  • Qué representan sus parámetros.
  • Qué unidades o escalas utiliza.
  • Qué devuelve exactamente.
  • Qué entradas son inválidas.
  • Qué ocurre en los casos límite.
  • Si modifica datos externos o produce efectos laterales.

71.23 Errores comunes

Al interpretar funciones reales, los errores más frecuentes son:

  • Asumir unidades sin confirmarlas.
  • Ignorar valores nulos, cero o listas vacías.
  • Confundir porcentaje con proporción.
  • No revisar dependencias externas.
  • Creer que el nombre de la función explica todo.
  • No distinguir entre valor calculado y efecto lateral.

71.24 Conclusión

Interpretar funciones reales es una habilidad práctica: permite leer código existente, detectar errores, modificar sistemas con más seguridad y comunicar reglas de negocio o fórmulas técnicas con claridad.

Una función bien entendida no es solo una caja que devuelve algo. Es una relación entre entradas, reglas, límites, unidades y consecuencias dentro de un programa.

Volver al índice