Una función definida por tramos usa distintas fórmulas según el intervalo donde se encuentra la entrada. Es una forma natural de traducir reglas condicionales a matemáticas y programación.
Muchas reglas reales no se describen con una sola fórmula. Una tarifa puede cambiar según el consumo, un impuesto puede depender de rangos, una bonificación puede aplicarse solo a partir de cierto valor y una regla de juego puede variar según el nivel.
Las funciones definidas por tramos permiten expresar estas situaciones usando una fórmula distinta para cada condición.
Una función definida por tramos asigna una expresión diferente según el intervalo o condición que cumple la entrada.
Para evaluar la función, primero se decide qué condición cumple x y luego se usa la fórmula correspondiente.
En programación, una función por tramos se implementa casi directamente con if, else if y else.
function f(x) {
if (x < 0) {
return x + 2;
}
return x ** 2;
}
console.log(f(-3));
console.log(f(0));
console.log(f(4));
Los límites de cada tramo deben quedar bien definidos. Es importante decidir qué ocurre exactamente en los puntos de cambio.
En este caso, x = 5 pertenece al segundo tramo porque la condición es x ≥ 5.
Para la función anterior:
| x | Tramo usado | f(x) |
|---|---|---|
| 3 | 2x | 6 |
| 4.9 | 2x | 9.8 |
| 5 | 10 | 10 |
| 8 | 10 | 10 |
El valor absoluto es una función por tramos.
function valorAbsolutoPorTramos(x) {
if (x < 0) {
return -x;
}
return x;
}
console.log(valorAbsolutoPorTramos(-8));
console.log(valorAbsolutoPorTramos(8));
Una función por tramos puede ser continua o tener saltos. Para revisar un punto de cambio, comparamos el valor que producen los tramos a izquierda y derecha.
Al acercarse a 5 por la izquierda, 2x se acerca a 10. En x = 5, el segundo tramo vale 10. No hay salto.
Si los valores de los tramos no coinciden en el punto de cambio, aparece una discontinuidad.
Cerca de 0 por la izquierda, la función se acerca a 0. Pero en 0, el segundo tramo vale 5.
Una función puede tener más de dos tramos. En código se implementa con varias condiciones ordenadas.
function tarifa(consumo) {
if (consumo <= 100) {
return consumo * 10;
}
if (consumo <= 300) {
return 1000 + (consumo - 100) * 15;
}
return 4000 + (consumo - 300) * 20;
}
console.log(tarifa(80));
console.log(tarifa(200));
console.log(tarifa(400));
Una tienda puede aplicar distintos descuentos según la cantidad comprada.
function descuento(cantidad) {
if (cantidad < 10) {
return 0;
}
if (cantidad < 50) {
return 0.1;
}
return 0.2;
}
function precioFinal(cantidad, precioUnitario) {
const subtotal = cantidad * precioUnitario;
return subtotal * (1 - descuento(cantidad));
}
console.log(precioFinal(5, 100));
console.log(precioFinal(20, 100));
console.log(precioFinal(60, 100));
En un juego, la experiencia necesaria para subir de nivel puede cambiar por rangos.
function experienciaNecesaria(nivel) {
if (nivel <= 10) {
return 100 * nivel;
}
if (nivel <= 30) {
return 1000 + 200 * (nivel - 10);
}
return 5000 + 500 * (nivel - 30);
}
console.log(experienciaNecesaria(5));
console.log(experienciaNecesaria(20));
console.log(experienciaNecesaria(40));
Al graficar funciones por tramos, conviene evaluar la función en varios puntos y revisar si hay saltos en los límites.
function g(x) {
if (x < 0) {
return x;
}
return x + 5;
}
function generarTabla(desde, hasta) {
const tabla = [];
for (let x = desde; x <= hasta; x++) {
tabla.push({ x, y: g(x) });
}
return tabla;
}
console.log(generarTabla(-3, 3));
En algunos programas es útil describir cada tramo como un objeto con una condición y una fórmula.
const tramos = [
{
condicion: x => x < 0,
formula: x => -x
},
{
condicion: x => x >= 0,
formula: x => x
}
];
function evaluarPorTramos(x) {
const tramo = tramos.find(t => t.condicion(x));
return tramo ? tramo.formula(x) : null;
}
console.log(evaluarPorTramos(-4));
console.log(evaluarPorTramos(4));
Las condiciones de una función por tramos deben cubrir los valores esperados y no deberían contradecirse entre sí.
| Problema | Consecuencia |
|---|---|
| Falta un intervalo | La función no sabe qué devolver para algunos valores |
| Dos tramos cubren el mismo valor | El resultado depende del orden de las condiciones |
| No se define qué pasa en el límite | Aparecen errores en valores como 0, 10 o 100 |
Las funciones definidas por tramos conectan directamente matemáticas y programación: cada tramo equivale a una regla condicional. Son muy útiles para representar sistemas donde el comportamiento cambia según rangos o estados.
En el próximo tema veremos funciones escalonadas, un caso particular donde la salida cambia por niveles.