Differenze tra le versioni di "GOSUB"

Da Gambas-it.org - Wikipedia.
Riga 16: Riga 16:
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
    
 
    
   Dim i As Integer
+
   Dim b, j As Byte
  Dim j As Integer
 
 
   
 
   
  For i = 1 To 3
+
  For b = 1 To 3
    <Font Color= #B22222>GoSub</font> <FONT color=darkgreen>etichetta1</font>   <Font Color=gray>' ''Il programma salta alla riga dove è presente l'etichetta "etichetta1"''</font>
+
    <Font Color= #B22222>GoSub</font> <FONT color=darkgreen>etichetta1</font> <Font Color=gray>' ''Il programma salta alla riga dove è presente l'etichetta "etichetta1"''</font>
  Next
+
  Next
 
   
 
   
      Return  <Font Color=gray>' ''Il programma esce fuori dalla routine, poiché questo è un normale Return non connesso al Gosub''</font>
+
  Return  <Font Color=gray>' ''Il programma esce fuori dalla routine, poiché questo è un normale Return non connesso al Gosub''</font>
 
   
 
   
  <FONT color=darkgreen>etichetta1:</font>
+
  <FONT color=darkgreen>etichetta1:</font>
  For j = 1 To 3
+
    Print "Prova";; i;; j
+
  For j = 1 To 3
  Next
+
    Print "Prova "; b;; j
 +
  Next
 
    
 
    
  ''<Font Color=gray>' Questo "Return" è connesso e dipendente dal "Gosub", in quanto posto dopo l'etichetta''
+
  <Font Color=gray>' ''Questo "Return" è connesso e dipendente dal "Gosub", in quanto posto dopo l'etichetta. Pertanto il programma torna su: alla riga immediatamente successiva al "Gosub":''</font>
' ''Pertanto il programma torna su: alla riga immediatamente successiva al "Gosub":''</font>
+
  <Font Color= #B22222>Return</font>
  <Font Color= #B22222>Return</font>
 
 
   
 
   
 
  '''End'''
 
  '''End'''
Riga 47: Riga 46:
 
<BR>Prova 3 2
 
<BR>Prova 3 2
 
<BR>Prova 3 3
 
<BR>Prova 3 3
 
  
  
Riga 59: Riga 57:
 
  '''Public''' Sub Button1_Click()
 
  '''Public''' Sub Button1_Click()
 
    
 
    
   Dim i As Integer
+
   Dim b, j As Byte
  Dim j As Integer
 
 
   
 
   
  GoSub etichetta1
+
  <Font Color= #B22222>GoSub</font> <FONT color=darkgreen>etichetta1</font>
 
   
 
   
  Print "Il GOSUB farà saltare questa riga, ma poi il Return al suo primo passaggio farà tornare il programma proprio qui."
+
  Print "Il GOSUB farà saltare questa riga, ma poi il Return al suo primo passaggio farà tornare il programma proprio qui."
 
   
 
   
  etichetta1:
+
  <FONT color=darkgreen>etichetta1:</font>
 
    
 
    
  Print "1° controllo"
+
  Print "1° controllo"
 
   
 
   
  Return
+
  Return
 
   
 
   
  Print "2° controllo"  <Font Color=gray>' ''Questa riga sarà del tutto saltata''</font>
+
  Print "2° controllo"  <Font Color=gray>' ''Questa riga sarà del tutto saltata''</font>
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 18:24, 22 mag 2023

L'istruzione GOSUB consente di saltare all'etichetta dichiarata all'interno della medesima routine, e continuare da lì l'esecuzione del codice. Se poi il programma incontra l'istruzione RETURN, esso torna sopra e precisamente alla linea di codice successiva all'istruzione GOSUB.

GOSUB etichetta 
 .......       
 .......       
               
 etichetta:   
 ...↓...
 ...↓...
Return


Esempio:

Public Sub Button1_Click()
 
 Dim b, j As Byte

 For b = 1 To 3
   GoSub etichetta1  ' Il programma salta alla riga dove è presente l'etichetta "etichetta1"
 Next

 Return   ' Il programma esce fuori dalla routine, poiché questo è un normale Return non connesso al Gosub

 etichetta1:

 For j = 1 To 3
   Print "Prova "; b;; j
 Next
 
' Questo "Return" è connesso e dipendente dal "Gosub", in quanto posto dopo l'etichetta. Pertanto il programma torna su: alla riga immediatamente successiva al "Gosub":
 Return

End

In console avremo:

Prova 1 1
Prova 1 2
Prova 1 3
Prova 2 1
Prova 2 2
Prova 2 3
Prova 3 1
Prova 3 2
Prova 3 3




Bisogna tenere conto che l'istruzione Return, una volta "utilizzata", e qualora non immediatamente chiamata di nuovo dal proprio comando GOSUB, si "trasforma" in un normale Return, determinando, così, l'uscita del processo dalla routine.

Esempio:

Public Sub Button1_Click()
 
 Dim b, j As Byte

 GoSub etichetta1

 Print "Il GOSUB farà saltare questa riga, ma poi il Return al suo primo passaggio farà tornare il programma proprio qui."

 etichetta1:
 
 Print "1° controllo"

 Return

 Print "2° controllo"   ' Questa riga sarà del tutto saltata

End

In console avremo infatti questo risultato:

1° controllo
Il GOSUB farà saltare questa riga, ma poi il Return al suo primo passaggio farà tornare il programma proprio qui.
1° controllo