Regola
Evita l'uso di goto.
L'istruzione goto crea un flusso di
controllo non strutturato che rende il codice difficile da seguire e manutenere.
Linguaggi supportati: 45+Introduzione
goto salta direttamente a punti arbitrari del codice, interrompendo il flusso naturale di esecuzione. Questo rende molto difficile ragionare sullo stato, sulla gestione degli errori e sulle performance. Mantenere codice che utilizza goto aumenta il rischio di bug subdoli e comportamenti imprevisti. Le alternative strutturate producono codice prevedibile, leggibile e manutenibile.
Perché è importante
Implicazioni di sicurezza: I salti non strutturati possono aggirare i controlli di convalida o autorizzazione, esponendo potenzialmente operazioni sensibili.
Impatto sulle performance: Complesse catene di goto rendono più difficili la profilazione e l'ottimizzazione, aumentando il rischio di percorsi di esecuzione inefficienti.
Manutenibilità del codice: goto crea un flusso di controllo simile a spaghetti, difficile da rifattorizzare o estendere in sicurezza.
Superficie di attacco: Salti impropri possono esporre involontariamente percorsi di codice non sicuri o saltare 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 analizzare il flusso o inserire ulteriore logica in sicurezza.
✅ 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 manutenibile, preservando al contempo un comportamento identico.
❌ 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 oscurano il percorso degli errori e l'esecuzione normale, rendendo difficile seguire o estendere il codice.
✅ Conforme:
function process(items) {
for (const item of items) {
if (!item) {
console.error('Invalid item detected');
return false;
}
}
return true;
}Perché è importante: cicli strutturati e return anticipati rendono la logica chiara, la gestione degli errori esplicita e la manutenzione più semplice.
Conclusione
Evita l'uso di goto per mantenere il codice strutturato, leggibile e sicuro. Usa cicli, funzioni e return anticipati per un flusso di controllo prevedibile. Questo riduce i costi di manutenzione, previene bug subdoli e garantisce percorsi di esecuzione sicuri.

