Regola
Da evitare l'uso di goto.
Il istruzione crea crea un controllo di controllo
non strutturato che fa sì che il codice difficile da seguire e da mantenere.
Lingue supportate: 45+Introduzione
vai a passa direttamente a punti arbitrari del codice, interrompendo il flusso naturale dell'esecuzione. Ciò rende molto difficile l'analisi dello stato, la gestione degli errori e la valutazione delle prestazioni. La manutenzione del codice che utilizza il `goto` aumenta il rischio di bug difficili da individuare e di comportamenti indesiderati. Le alternative strutturate producono codice prevedibile, leggibile e facile da mantenere.
Perché è importante
Implicazioni per la sicurezza: i salti non strutturati possono aggirare i controlli di convalida o autorizzazione, esponendo potenzialmente operazioni sensibili.
Impatto sulle prestazioni: le catene complesse di istruzioni `goto` rendono più difficili la profilatura e l'ottimizzazione, aumentando il rischio di percorsi di esecuzione inefficienti.
Manutenibilità del codice: l'istruzione `goto` crea un flusso di controllo intricato, simile a uno "spaghetti", difficile da rifattorizzare o estendere in modo sicuro.
Superficie di attacco: i salti impropri possono esporre involontariamente percorsi di codice non sicuri o tralasciare sezioni critiche per la sicurezza.
Esempi di codice
❌ Non conforme:
<?php
for ($i = 0; $i < 10; $i++) {
if ($i == 3) {
goto end;
}
echo "$i\n";
}
end:
echo "Jumped out!";
?>
Perché è sbagliato: le istruzioni `goto` creano cicli non strutturati, rendendo difficile comprendere il flusso di esecuzione o inserire logica aggiuntiva in modo sicuro.
✅ Conforme:
<?php
for ($i = 0; $i < 10; $i++) {
if ($i == 3) {
break;
}
echo "$i\n";
}
echo "Jumped out!";
?>
Perché è importante: l'uso di un ciclo "for" rende il flusso di controllo esplicito, prevedibile e gestibile, pur mantenendo lo stesso comportamento.
❌ Non conforme:
function process(items) {
for (const item of items) {
if (!item) {
console.error('Invalid item detected');
return false;
}
}
return true;
}Perché è sbagliato: i salti con `goto` rendono poco chiari il percorso di errore e l'esecuzione normale, rendendo difficile seguirli o estenderli.
✅ Conforme:
function process(items) {
for (const item of items) {
if (!item) {
console.error('Invalid item detected');
return false;
}
}
return true;
}Perché è importante: i cicli strutturati e i ritorni anticipati rendono la logica chiara, la gestione degli errori esplicita e la manutenzione più semplice.
Conclusione
Evita l'uso di `goto` per mantenere un codice strutturato, leggibile e sicuro. Utilizza cicli, funzioni e ritorni anticipati per garantire un flusso di controllo prevedibile. Ciò riduce i costi di manutenzione, previene bug difficili da individuare e garantisce percorsi di esecuzione sicuri.

