Newsgroup: it.comp.lang.c++
Titolo: goto

So bene che "goto" č da evitare il piů possibile, ma esistono casi in
cui č normale utilizzarlo senza essere (come minimo) fucilati?
Ad esempio come si potrebbe rendere una situazione simile senza l'uso
di questo costrutto:
for(...){
  for(...){
    if (...)
	goto fatto;
    else
      ...
  }
}
fatto:
  ...
Grazie
Marco Barisione

 cui è normale utilizzarlo senza essere (come minimo) fucilati?


 fatto:
Ma no!
Si continua ad usare il break:
for (...)
{
    for (...)
    {
        if (cond ) break;
    }
if ( cond ) break;
}
Ciao!
Daniele.

Se paragoniamo il tuo esempio con le due alternative che ti sono state
fornite al momento in cui ti scrivo, il tuo risulta il piu' pulito anche
in presenza del "goto". Il problema pero' e' che e' troppo limitante
ragionare in modo astratto dal contesto, bisognerebbe verificare se la
combinazione di costrutti che hai in mente di usare e' davvero la
soluzione migliore per il problema specifico. In generale mi aspetto di
no, ma non escludo a priori che possa risultare vero il contrario.
Ciao,
Nicola

 writes:

Concordo.  E vorrei ricordare anche che Brian e Dennis dicono
esplicitamente (K&R2 pag. 66, con libera traduzione del sottoscritto):
"Formalmente, il _goto_ non e' necessario ... Comunque ci sono alcune
situazioni in cui puo' essere accettabile ... [come] abbandonare lo
stream delle istruzioni all'interno qualche struttura profondamente
annidata, ad esempio quando si deve uscire da due o piu' loops
contemporaneamente ... [il _goto_ puo' talvolta essere eliminato]
soltanto introducendo o tests ripetuti o variabili aggiuntive, il che
puo' rendere il codice senza _goto_ piu' difficile da interpretare e
da mantenere."
E se lo trovano accettabile loro, ragazzi, ogni tanto va bene anche
per me 8^)
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
The instructions said to use Windows 98 or better - so I installed FreeBSD.

D'accordo. Anche se secondo me il programmatore che si infila in
strutture di controllo cosi' intricate da non saperne venir fuori senza
goto da' spesso prova di scarsa linearita' di pensiero.
Ciao,
Nicola

fatto:
Non é certo questo il caso in cui il goto é indispensabile, anzi, se
dovessi dare un giudizio su un programma scritto cosi' lo bollerei
sicuramente con una parola di cinque lettere che comincia per M e
finisce con la A.
Anzitutto il for del c++ permette di includere delle condizioni che se
verificate permettono di uscire dal for stesso. Un esempio
stupidissimo:
bool fatto=false;
for(int x=0;x<10 && fatto==false;x++)
    {
    y=x*5;
    if(y==45)fatto=true;
    }
inoltre esiste l'istruzione break
for(int x=0;x<10;x++)
    {
    y=x*5;
    if(y==45)break;            
    }
personalmente preferisco nettamente la prima forma, ma entrambe sono
corrette e sicuramente migliori e più pulite del goto.
Il Ghenio
-----
Jesse: Preparatevi a passare dei guai.
James: Dei guai molto grossi!!!
(Team Rocket)
-----

}
Non è poi una regola così rigida, quella di non utilizzare goto: pensa al tuo
codice in un'applicazione che abbia bisogno di grande velocità, e che esegua
molto spesso questi cicli: non credi che tutti questi if aggiunti
rallenterebbero inutilmente il sistema? Così come anche, in C++, si potrebbe
pensare, nel caso della ricerca di un valore, a restituirlo tramite eccezioni.
Non vedo il motivo di essere tanto fondamentalisti, in fondo tutte le soluzioni
sono da valutare. E un goto, diretto peraltro in un punto tanto vicino della
funzione, non mi sembra sia la fine del mondo... se lo fosse stato, non avremmo
avuto l'istruzione goto in C++.
... Queste tematiche sono contemplate anche da Bjarne Stroustrup nella sua
terza edizione del libro "C++, linguaggio, libreria standard, principi di
programmazione", e neanche lui mi sembra tanto fondamentalista ...
Ciao
Domenico Barra

    }
L'istruzione break NON ha la stessa funzione del goto.
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."



eheh... anche tu credi che la linearita' del codice rispecchi la
linearita' cerebrale ? ;)


 ha scritto nel messaggio
news:sgls9tccqaq5du43k...@4ax.com...

Penso che il goto, come la sua traduzione letterale, (vai a .....) sia un
espressione un pò forte ma a volte necessaria.
Scusate la facezia.
----
Sergio Bianchi

Il Ghenio
Ciao
Marco Barisione

linearita' cerebrale ? ;)
OK ma non sono io a non avere linearità cerebrale; l'esempio non viene
dal codice di qualche mio programma, era solo una curiosità.  :)
Ciao
Marco Barisione

soltanto introducendo o tests ripetuti o variabili aggiuntive
Non mi sembra una grossa scoperta. Si sa bene che l'unico motivo che
può indurre un programmatore ad usare goto sta nel fatto che
apparentemente semplifica la vita nella realizzazione di loop
particolarmente complessi.
A mio avviso chi ricorre all'uso di goto senza aver prima valutato
tutte le possibili alternative dimostra di non essere particolarmente
bravo nella strutturazione del suo codice.


dei pochissimi usi ragionevoli di goto.
Un conto é dire che é uno dei pochissimi usi ragionevoli, un altro
conto é consigliarne l'uso, cosa che a quanto pare Stroustrup non fa.


In VB è comunque inevitabile usarlo per la gestione degli errori.
cmq il goto usato dal VB per gli errori è profondamente diverso da
quello usato normalmente. Infatti esso è chiamato in maniera
automatica dal compilatore ("compilatore", non esageriamo :-) e non in
maniera esplicita dal codice. Se ci pensi è simile alla gestione delle
eccezioni con due grosse limitazioni:
- è più complicato "spezzare" la gesitione degli errori all'interno
della stessa routine
- molto più grave, l'errore deve essere gestito subito e non può
ripercorre lo stack.
Anto
--
Antonio Cuni, 18 anni, studente
Brainbench Certification: 
Master C++: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
http://www.brainbench.com/transcript.jsp?pid=1301688