Newsgroup: it.comp.lang.visual-basic
Titolo: Chiarimenti su istruzione GoTo

Public Sub Command1_Click()
    If Text1.Text > Text2.Text Then
        ris = Val(Text1.Text) + Val(Text2.Text)
        GoTo risultato
    Else
        GoTo fine
    End If
risultato: Text3.Text = ris
fine: Text4.Text = "fine"
End Sub
Perchè vengono eseguite entrambe le condizioni?
Per motivi di studio mi sto cimentando nell'istruzione GoTo ma pur avendo 2 
libri di VB e internet a disposizione non sono riuscita a far funzionare un 
semplice pulsante... Senza l'istruzione GoTo funzionerebbe tutto bene ma 
allora in quale occasione viene utilizzato?
Non ho ben capito come funziona il GoTo, qualcuno riesce a spiegarmi dove 
sbaglio?
Ho provato anche a mettere 2 istruzioni If -End If  e togliere Else ma 
niente...

 Per motivi di studio mi sto cimentando nell'istruzione GoTo
[SNIP]
Per "motivi di studio" sarebbe bene dimenticare l'esistenza del GoTo il 
prima possibile, con l'unica eccezione dell'istruzione On Error
Detto questo, il comportamento e' normale dato che l'effetto di GoTo e' di 
far saltare l'esecuzione del codice alla riga etichettata con la voce 
corrispondente e proseguire da li'
Quando entri nel primo caso in effetti si verifica solo la condizione 
'maggiore di', il successivo 'GoTo risultato' salta al punto giusto ma 
esegue *tutte* le istruzioni che seguono, comprese quelle che hanno altre 
etichette (che a tutti gli effetti e' come se fossero dei commenti, vengono 
sempre ignorate se non quando usi per l'appunto GoTo)
Se avessi voluto fare eseguire soltanto una delle delle due, insistendo con 
GoTo, il codice sarebbe dovuto somigliare a questo:
Public Sub Command1_Click
If Text1.Text > Text2.Text Then
    ris = Val(Text1.Text) + Val(Text2.Text)
    GoTo risultato
Else
    GoTo fine
End If
risultato: Text3.Text = ris
GoTo fineperdavvero
fine: Text4.Text = "fine"
fineperdavvero:
End Sub
come puoi vedere il tutto e' leggibile quanto un libro in sanscrito per un 
venusiano, motivo per cui l'uso del GoTo e' *fortemente* sconsigliato
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown 

Un consiglio :
Evita il goto !!!! Anzi scordati che esiste !!!!
Tempo fa per valutare il lavoro di certi programmatori si contavano i
"goto" messi nel codice.
Ciao
PS : Nel tuo esempio per farlo funzionare come vorresti metti una EXIT
SUB tra le due label
............
risultato: Text3.Text = ris
exit sub
fine: Text4.Text = "fine" 
..........

 Text2.Text ) il go to ti manda al risultato
e poi il codice continua con fine...quindi è naturale che faccia entrambe le
condizioni
Nel secondo caso salti direttamente a fine....e chiaramente non ti considera
risultato:....
GoTo (se sbaglio spero nella correzione di quelli bravi) serve solo per
saltare una parte di codice....
Nel tuo caso goto risultato è inutile perchè già con if then else (sempre
nel caso che sia verificata la prima condizione)
arriveresti al punto risultato:
Spero di essere stato chiaro...
Ciao IAK

 Per motivi di studio mi sto cimentando nell'istruzione GoTo ma pur avendo 2 
"Goto X" significa "vai a X e continua da lì" non significa "vai a X e
fermati lì".
tieni conto che Goto è un'istruzione avanzatissima e dovrebbe essere usata
solo da programmatori espertissimi.
Narra leggenda che "goto" sia stata usata con cognizione di causa
solamente una volta, precisamente durante lo sviluppo di Half Life 2.
Pare che un hacker invidioso abbia trafugato i sorgenti del famoso gioco
proprio per studiare nei dettagli le circostanze che hanno reso necessario
il suo utilizzo.
termoPilucco
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 End Sub
Public Sub Command1_Click()
    If Text1.Text > Text2.Text Then
        ris = Val(Text1.Text) + Val(Text2.Text)
        GoTo risultato
   Else
       GoTo fine
   End If
fine: Text4.Text = "fine, č minore"
risultato: Text3.Text = ris
End Sub
Perchč cosě invece funziona? Ho solo invertito fine: e risultato:


Ti dà lo stesso problema di prima...solo a parti invertite...
ciao
iak

 Perchè così invece funziona? Ho solo invertito fine: e risultato:
Nel caso Else tu salti a fine, imposti la text4, poi imposti la text3... 
però siccome ris non è mai stata utilizzata il suo valore è nullo e 
l'istruzione non ha effetto.
Ciao,
Federico

 Perchè così invece funziona? Ho solo invertito fine: e risultato:
E che ne dici di
 Public Sub Command1_Click()
    If Text1.Text > Text2.Text Then
         ris = Val(Text1.Text) + Val(Text2.Text)
         Text3.Text = ris
    Else
        Text4.Text = "fine, è minore"
    End If
End Sub
?
Ciao
--
Qualunque mentecatto può scrivere codice che un computer possa capire.
I buoni programmatori scrivono codice che gli uomini possano capire.
[Martin Fowler]

 Perchč cosě invece funziona? Ho solo invertito fine: e risultato:
Il motivo per cui apparentemente funziona te lo ha spiegato Federico; se 
vuoi verificare quel'e' l'effettivo comportamento del codice, metti un 
breakpoint sulla prima istruzione, premi il tuo pulsante e poi procedi con 
l'esecuzione passo-passo (trovi tutto sulla guida su come fare queste 
operazioni, e probabilmente anche nei tuoi libri), vedrai che vengono 
eseguite entrambe le istruzioni finali come nel primo caso.
Dopo di che, dai retta, lascia perdere GoTo che aggiunge solo confusione 
alla confusione esistente.


Devi semplicemente aggiungere un 'exit sub' tra le 2 label cioè
Public Sub Command1_Click()
    If Text1.Text > Text2.Text Then
        ris = Val(Text1.Text) + Val(Text2.Text)
        GoTo risultato
    Else
        GoTo fine
    End If
risultato: Text3.Text = ris
exit sub
fine: Text4.Text = "fine"
End Sub
Ciao
"G" <iz...@hotmail.itNOSPAM> ha scritto nel messaggio
news:HqFQd.35901$QG6.6...@twister2.libero.it...


 sbaglio?
Sbagli nel volerlo utilizzare.
Andrea

 Sbagli nel volerlo utilizzare.
Non è che io lo voglia utilizzare ma è il prof. che me l'ha imposto...
So' bene che senza il GoTo funziona come dice Zanna ma il problema era 
cercare di capire come funziona. Ora ho capito, grazie a tutti! :-) 

 cercare di capire come funziona. Ora ho capito, grazie a tutti! :-) 
Hai un prof di matematica che vi fà fare anche laboratorio
d'Informatica, vero?
Ciao,
Andrea