Aikido

Pourquoi il faut vérifier le diviseur avant d'effectuer des opérations de division

Lisibilité

Règle
Vérifier diviseur avant division .
Division par zéro provoque des et et
doit être évités avec des .

Langues prises en charge : 45+

Introduction

La division par zéro provoque des erreurs d'exécution immédiates dans la plupart des langages, faisant planter les applications sans dégradation gracieuse. Les entrées utilisateur, les valeurs calculées ou les résultats de base de données peuvent tous produire des diviseurs nuls de manière inattendue. Une seule opération de division non vérifiée peut faire tomber les services de production lorsque des données de cas limite déclenchent l'erreur.

Pourquoi c'est important

Stabilité du système : La division par zéro peut faire planter l'application immédiatement dans des langages comme Java, C et Python. En production, cela signifie des requêtes abandonnées, des transactions interrompues et une indisponibilité du service. Même en JavaScript où la division par zéro renvoie Infini ou NaN, ces valeurs se propagent à travers les calculs, entraînant des résultats incorrects.

Intégrité des données : Lorsque des erreurs de division se produisent lors du traitement par lots ou dans les pipelines de données, des résultats partiels peuvent être écrits avant le crash. Cela laisse les données dans des états incohérents, nécessitant une récupération manuelle et pouvant corrompre les systèmes en aval qui dépendent de données complètes.

Surface d'attaque : Les attaquants peuvent intentionnellement créer des entrées qui produisent des diviseurs nuls pour faire planter les services. Les points d'accès API qui effectuent des calculs sans valider les diviseurs deviennent des vecteurs de déni de service. Une seule requête malveillante peut faire tomber l'ensemble du service.

Exemples de code

❌ Non conforme :

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

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

Pourquoi c'est incorrect : Les deux fonctions plantent lorsque le diviseur est zéro. calculateAverageOrderValue() échoue lorsque orderCount est 0, et calculateConversionRate() échoue lorsque visiteurs est 0. Ces scénarios sont réalistes : les nouvelles entreprises ont zéro commande, les campagnes peuvent avoir zéro visiteur.

✅ 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;
}

Pourquoi c'est important : Des vérifications explicites évitent les plantages dus à une division par zéro. Les fonctions renvoient des valeurs par défaut sensées (zéro) lorsque la division n'est pas possible. L'application continue de fonctionner même avec des entrées de cas limites, maintenant ainsi sa stabilité et sa disponibilité.

Conclusion

Validez toujours les diviseurs avant les opérations de division. Retournez des valeurs par défaut appropriées, lancez des erreurs descriptives ou gérez le cas de zéro en fonction de la logique métier. Ne supposez jamais que les diviseurs seront non nuls, surtout avec les entrées utilisateur ou les données externes.

FAQ

Des questions ?

Dois-je vérifier les zéros négatifs ou les cas limites des nombres à virgule flottante ?

En JavaScript, -0 === 0 est vrai, donc une seule vérification gère les deux cas. Puisque JavaScript retourne Infinity ou NaN au lieu de planter, vous devriez également vérifier ces valeurs dans le résultat si votre application nécessite des calculs numériques précis : si (!isFinite(result)). Certains domaines exigent de vérifier l'ordre de grandeur du diviseur (nombres très petits proches de zéro) pour éviter la perte de précision dans l'arithmétique à virgule flottante.

Qu'en est-il des langages qui renvoient l'infini au lieu de planter ?

JavaScript renvoie Infinity pour une division par zéro, et non une erreur. Cependant, Infinity se propage à travers les calculs, produisant des résultats inattendus. Il est préférable de vérifier explicitement les diviseurs nuls et de les gérer de manière appropriée plutôt que de se fier au comportement d'Infinity.

Comment gérer la division dans les requêtes de base de données ?

Le comportement des bases de données varie : PostgreSQL génère des erreurs en cas de division par zéro, tandis que MySQL renvoie NULL par défaut. Utilisez NULLIF pour une sécurité inter-bases de données : SELECT total / NULLIF(count, 0) renvoie NULL au lieu d'une erreur. Ou utilisez des instructions CASE explicites : CASE WHEN count = 0 THEN 0 ELSE total / count END. Les contrôles au niveau de la base de données préviennent les problèmes, quel que soit le comportement spécifique de la base de données.

Sécurisez votre environnement dès maintenant.

Sécurisez votre code, votre cloud et votre environnement d’exécution dans un système centralisé unique.
Détectez et corrigez les vulnérabilités rapidement et automatiquement.

Aucune carte de crédit requise | Résultats en 32 secondes.