Utilizzare goto qui è davvero così brutto?
nel marzo 1968, Dijkstra inviato una lettera al Communications of the ACM che è stato pubblicato con il titolo Go To Statement Considered Harmful. È una lettura interessante e parte della tradizione dei programmatori.
L'argomento contro GOTO presentato in questa lettera ha a che fare con il modo in cui i programmatori costruiscono un modello mentale per tracciare l'avanzamento dell'esecuzione del codice. Dijkstra sostiene che un tale modello mentale è importante, perché il valore delle variabili è significativo solo in relazione al progresso dell'esecuzione. Ad esempio, quando il nostro programma conta il numero di volte in cui si verifica un evento, c'è sempre un momento intermedio in cui si sono verificati eventi N, ma la variabile che ne tiene traccia non è stata ancora incrementata ed è ancora a N-1.
Egli passa attraverso questi passaggi nel suo ragionamento contro GOTO:
prima prendere in considerazione un linguaggio molto semplice senza procedure, loops o GOTO. In tale linguaggio, il programmatore può monitorare mentalmente l'esecuzione immaginando un puntatore di esecuzione che avanza dall'inizio del file fino alla fine. Un singolo indice (ovvero il numero di riga) è sufficiente per modellare l'avanzamento dell'esecuzione.
Ora aggiungiamo procedure alla lingua. L'avanzamento dell'esecuzione non può più essere monitorato da un singolo indice, come potrebbe essere all'interno di una procedura. Dobbiamo anche tenere traccia da quale linea è stata chiamata la procedura. Inoltre, le procedure possono essere chiamate da altre procedure. Pertanto, modelliamo l'andamento dell'esecuzione come una sequenza di indici. (Nella vita reale, i programmatori chiamano tale sequenza "stack trace".)
Ora aggiungiamo loop alla lingua. Per ogni riga nella nostra traccia di stack che si trova all'interno di un corpo del ciclo, è necessario aggiungere un altro tipo di indice per modellare l'avanzamento dell'esecuzione: il conteggio della ripetizione.
Ora aggiungiamo GOTO. Dijkstra sostiene che con l'uso sfrenato di GOTO, la nostra capacità di tracciare i progressi di esecuzione ora si interrompe. Possiamo ancora tenere traccia dell'avanzamento dell'esecuzione con un "clock di esecuzione" dicendo "ora stiamo eseguendo la 152esima istruzione". Tuttavia, questo non è veramente utile per stabilire il contesto che è necessario per interpretare i valori delle variabili.
Finché usiamo solo istruzioni GOTO per costruire loop semplici, si può sostenere che la situazione è equivalente a punto (3), e non c'è nessun problema. Ma in quel caso puoi semplicemente usare i costrutti del ciclo. Meglio tenere GOTO fuori dal tuo codice, in modo da non scivolare nella situazione descritta al punto (4).
fonte
2010-09-24 11:08:45
Cosa c'è di sbagliato nei loop? – Joe
Non c'è niente di sbagliato nei loop, stavo solo chiedendo. – Pietro
Ad ogni modo, ora ci sono [altre cose di cui preoccuparsi] (http://xkcd.com/292/). * SCNR * – Bobby