Regola
Controlla il divisore prima di eseguire operazioni di divisione.
La divisione per zero provoca errori in fase di esecuzione e
deve essere prevenuta tramite controlli espliciti.
Linguaggi supportati: 45+Introduzione
La divisione per zero genera errori di runtime immediati nella maggior parte dei linguaggi, mandando in crash le applicazioni senza alcuna gestione elegante del malfunzionamento. L'input degli utenti, i valori calcolati o i risultati del database possono inaspettatamente produrre divisori pari a zero. Una singola operazione di divisione non validata può compromettere i servizi in produzione quando dati al limite attivano l'errore.
Perché è importante
Stabilità del sistema: La divisione per zero può mandare immediatamente in crash l'applicazione in linguaggi come Java, C e Python. In produzione, questo si traduce in richieste perse, transazioni interrotte e indisponibilità del servizio. Anche in JavaScript, dove la divisione per zero restituisce Infinito oppure NaN, questi valori si propagano attraverso i calcoli generando risultati errati.
Integrità dei dati: quando si verificano errori di divisione durante l'elaborazione batch o le pipeline di dati, è possibile che vengano scritti risultati parziali prima del crash. Questo lascia i dati in uno stato incoerente, richiedendo un ripristino manuale e potenzialmente corrompendo i sistemi a valle che dipendono da dati completi.
Superficie di attacco: gli hacker possono creare intenzionalmente input che producono divisori pari a zero per bloccare i servizi. Gli endpoint API che eseguono calcoli senza validare i divisori diventano vettori di attacco per la denial-of-service. Una singola richiesta malevola può mettere fuori uso l'intero servizio.
Esempi di codice
❌ Non conforme:
function calculateAverageOrderValue(totalRevenue, orderCount) {
return totalRevenue / orderCount;
}
function calculateConversionRate(conversions, visitors) {
return (conversions / visitors) * 100;
}
Perché è errato: Entrambe le funzioni vanno in crash quando il divisore è zero. calculateAverageOrderValue() fallisce quando orderCount è 0, e calculateConversionRate() fallisce quando visitors è 0. Questi scenari sono realistici: le nuove aziende hanno zero ordini, le campagne possono avere zero visitatori.
✅ 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;
}Perché è importante: i controlli espliciti prevengono errori di crash dovuti alla divisione per zero. Le funzioni restituiscono valori predefiniti sensati (zero) quando la divisione non è possibile. L'applicazione continua a funzionare anche con input limite, mantenendo stabilità e disponibilità.
Conclusione
Valida sempre i divisori prima delle operazioni di divisione. Restituisci valori predefiniti appropriati, genera errori descrittivi o gestisci il caso dello zero in base alla logica di business. Non dare mai per scontato che i divisori siano diversi da zero, soprattutto in presenza di input utente o dati esterni.

