Aikido

Perché evitare l'uso di goto nel codice per garantire manutenibilità e sicurezza

Leggibilità

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.

FAQ

Hai domande?

L'uso di goto è mai accettabile nel codice moderno?

Raramente. Solo nei linguaggi di basso livello per operazioni simili all'assembly critiche per le prestazioni. Il codice di alto livello dovrebbe utilizzare un flusso di controllo strutturato.

‍

Come posso sostituire goto nei loop complessi?

Utilizza break, continue, return anticipati o funzioni di supporto per strutturare il flusso senza salti arbitrari.

‍

Evitare goto può migliorare la sicurezza?

Sì. Un flusso di controllo esplicito garantisce che la convalida e i controlli di sicurezza non vengano aggirati accidentalmente.

‍

Evitare goto influisce sulle prestazioni?

No. I loop e le funzioni strutturate sono efficienti e più facili da ottimizzare rispetto ai salti arbitrari.

Metti in sicurezza ora

Metti in sicurezza il tuo codice, il cloud e il runtime in un unico sistema centralizzato.
Trova e risolvi le vulnerabilità rapidamente e automaticamente.

Nessuna carta di credito richiesta | Risultati della scansione in 32 secondi.