Aikido

¿Por qué se debería comprobar el divisor antes de realizar operaciones de división?

Legibilidad

Regla
Comprobación divisor antes de la .
División por cero provoca errores se y
debe evitar evitar con controles .

Idiomas admitidos: 45+

Introducción

La división por cero provoca errores de tiempo de ejecución inmediatos en la mayoría de los lenguajes, lo que hace que las aplicaciones fallen sin una degradación elegante. La entrada de usuario, los valores calculados o los resultados de la base de datos pueden producir divisores cero de forma inesperada. Una única operación de división no verificada puede paralizar los servicios de producción cuando los datos de casos extremos desencadenan el error.

Por qué es importante

Estabilidad del sistema: La división por cero puede provocar el cierre inmediato de la aplicación en lenguajes como Java, C y Python. En producción, esto se traduce en solicitudes descartadas, transacciones interrumpidas e indisponibilidad del servicio. Incluso en JavaScript, donde la división por cero devuelve Infinito o NaN, estos valores se propagan a través de los cálculos, causando resultados incorrectos.

Integridad de los datos: Cuando se producen errores de división durante el procesamiento por lotes o en los pipelines de datos, se pueden escribir resultados parciales antes de la caída del sistema. Esto deja los datos en estados inconsistentes, lo que requiere una recuperación manual y puede corromper sistemas posteriores que dependen de datos completos.

Superficie de ataque: Los atacantes pueden diseñar intencionadamente entradas que produzcan divisores cero para bloquear servicios. Los endpoints de API que realizan cálculos sin validar los divisores se convierten en vectores de denegación de servicio. Una única solicitud maliciosa puede derribar todo el servicio.

Ejemplos de código

❌ No conforme:

function calculateAverageOrderValue(totalRevenue, orderCount) {
    return totalRevenue / orderCount;
}

function calculateConversionRate(conversions, visitors) {
    return (conversions / visitors) * 100;
}

Por qué es incorrecto: Ambas funciones fallan cuando el divisor es cero. calcularValorMedioPedido() falla cuando orderCount es 0, y calcularTasaConversion() falla cuando visitantes es 0. Estos escenarios son realistas: las nuevas empresas tienen cero pedidos, las campañas pueden tener cero visitantes.

✅ Conforme:

function calculateAverageOrderValue(totalRevenue, orderCount) {
    if (orderCount === 0) {
        return 0;
    }
    return totalRevenue / orderCount;
}

function calculateConversionRate(conversions, visitors) {
    if (visitors === 0) {
        return 0;
    }
    return (conversions / visitors) * 100;
}

Por qué esto es importante: Las comprobaciones explícitas evitan fallos por división por cero. Las funciones devuelven valores predeterminados sensatos (cero) cuando la división no es posible. La aplicación sigue funcionando incluso con entradas de casos extremos, manteniendo la estabilidad y la disponibilidad.

Conclusión

Valide siempre los divisores antes de las operaciones de división. Devuelva valores predeterminados apropiados, lance errores descriptivos o gestione el caso de cero basándose en la lógica de negocio. Nunca asuma que los divisores serán distintos de cero, especialmente con entradas de usuario o datos externos.

Preguntas frecuentes

¿Tiene preguntas?

¿Debería comprobar el cero negativo o los casos límite de punto flotante?

En JavaScript, -0 === 0 es verdadero, por lo que una única comprobación los maneja a ambos. Dado que JavaScript devuelve Infinity o NaN en lugar de fallar, también deberías comprobar estos valores en el resultado si tu aplicación requiere cálculos numéricos precisos: if (!isFinite(result)). Algunos dominios requieren comprobar la magnitud del divisor (números muy pequeños cercanos a cero) para evitar la pérdida de precisión en la aritmética de punto flotante.

¿Qué hay de los lenguajes que devuelven Infinity en lugar de fallar?

JavaScript devuelve Infinity para la división por cero, no un error. Sin embargo, Infinity se propaga a través de los cálculos, produciendo resultados inesperados. Compruebe explícitamente los divisores cero y manéjelos de forma adecuada en lugar de depender del comportamiento de Infinity.

¿Cómo gestiono la división en consultas de base de datos?

El comportamiento de las bases de datos varía: PostgreSQL lanza errores en la división por cero, mientras que MySQL devuelve NULL por defecto. Usa NULLIF para mayor seguridad entre bases de datos: SELECT total / NULLIF(count, 0) devuelve NULL en lugar de un error. O usa sentencias CASE explícitas: CASE WHEN count = 0 THEN 0 ELSE total / count END. Las comprobaciones a nivel de base de datos previenen problemas independientemente del comportamiento específico de la base de datos.

Asegúrate ahora.

Proteja su código, la nube y el entorno de ejecución en un único sistema central.
Encuentre y corrija vulnerabilidades de forma rápida y automática.

No se requiere tarjeta de crédito | Resultados del escaneo en 32 segundos.