Differenze tra le versioni di "FOR...NEXT"

Da Gambas-it.org - Wikipedia.
Riga 10: Riga 10:
  
 
  DIM variabile AS Integer
 
  DIM variabile AS Integer
     FOR variabile = 0 TO 10
+
     '''FOR variabile = 0 TO 10'''
 
       Message.Info("Numero " & Str$(variabile))
 
       Message.Info("Numero " & Str$(variabile))
     NEXT  
+
     '''NEXT'''
 
''Spiegazione''
 
''Spiegazione''
 
 
Riga 21: Riga 21:
  
 
  DIM variabile AS Integer
 
  DIM variabile AS Integer
     FOR variabile = 0 TO 10 STEP 2
+
     '''FOR variabile = 0 TO 10 STEP 2'''
 
       Message.Info("Numero " & Str$(variabile))
 
       Message.Info("Numero " & Str$(variabile))
     NEXT  
+
     '''NEXT'''
 
''Spiegazione''
 
''Spiegazione''
  
Riga 32: Riga 32:
  
 
  DIM variabile AS Integer
 
  DIM variabile AS Integer
     FOR variabile = 10 TO 0 STEP -2
+
     '''FOR variabile = 10 TO 0 STEP -2'''
 
       Message.Info("Numero " & Str$(variabile))
 
       Message.Info("Numero " & Str$(variabile))
     NEXT  
+
     '''NEXT'''
 
''Spiegazione''
 
''Spiegazione''
 
 
Riga 58: Riga 58:
 
  DIM variabile1 AS Integer
 
  DIM variabile1 AS Integer
 
  DIM variabile2 AS Integer
 
  DIM variabile2 AS Integer
     FOR variabile = 0 TO 10
+
     '''FOR variabile = 0 TO 10'''
       FOR variabile1 = 0 TO 10
+
       '''FOR variabile1 = 0 TO 10'''
           FOR variabile2 = 0 TO 10
+
           '''FOR variabile2 = 0 TO 10'''
 
             Message.Info("Numero " & Str$(variabile) & Str$(variabile1) & Str$(variabile2))
 
             Message.Info("Numero " & Str$(variabile) & Str$(variabile1) & Str$(variabile2))
           NEXT  
+
           '''NEXT'''
       NEXT
+
       '''NEXT'''
     NEXT
+
     '''NEXT'''
 
''Spiegazione''
 
''Spiegazione''
 
 
Riga 73: Riga 73:
  
 
  DIM variabile AS Integer
 
  DIM variabile AS Integer
     FOR variabile = 0 TO 10
+
     '''FOR variabile = 0 TO 10'''
 
         IF variabile = 5 then  
 
         IF variabile = 5 then  
 
             Message.Info("Esco dal ciclo.")
 
             Message.Info("Esco dal ciclo.")
Riga 79: Riga 79:
 
         ENDIF
 
         ENDIF
 
       Message.Info("Numero " & Str$(variabile))
 
       Message.Info("Numero " & Str$(variabile))
     NEXT
+
     '''NEXT'''
 
''Spiegazione''
 
''Spiegazione''
 
 
 
Il programma mostrerà i messaggi per ogni valore di variabile da 0 a 4; quando variabile raggiunge il valore 5 il sistema uscirà (BREAK) dal ciclo e non mostrerà più alcun messaggio.
 
Il programma mostrerà i messaggi per ogni valore di variabile da 0 a 4; quando variabile raggiunge il valore 5 il sistema uscirà (BREAK) dal ciclo e non mostrerà più alcun messaggio.
 +
 +
----
 +
La sintassi FOR...NEXT viene in aiuto anche nel caso di loop su array e oggetti array, nel caso ci interessi solo il contenuto dell'array e non il numero di cicli effettuati:
 +
 +
''Esempio 6'' - '''Ciclo su array stringa'''
 +
 +
DIM variabile AS String[10]
 +
DIM valore as String
 +
    '''FOR EACH valore IN variabile'''
 +
      PRINT valore
 +
    '''NEXT'''
 +
''Spiegazione''
 +
 +
Come si può vedere dall'esempio, sono state inserite le parole chiave '''EACH''' e '''IN''', che indicano al ciclo di prendere tutti i valori includi nell'array 'variabile', uno per volta, di copiarli in 'valore', e di renderli disponibili alle istruzioni incluse nel loop. A questo punto pare evidente che la gestione di come e dove andare a prendere i dati è demandata al ciclo FOR, e a noi non resta che prenderci il valore restituito ogni volta, e manipolarlo come vogliamo, senza doverci neppure preoccupare di modificare l'array stesso, dato che la variabile 'value' contiene solo una copia del corrente elemento dell'array.
 +
La sintassi è valida per ogni tipo di oggetto di tipo array, comprese le '''Collection'''.

Versione delle 16:49, 25 set 2008

FOR variabile = valore1 TO valore2 [ STEP valore3 ]
<<vostro codice>> 
NEXT

Ripete un ciclo incrementando o decrementando un valore.



Esempio 1 - Ciclo crescente semplice

DIM variabile AS Integer
   FOR variabile = 0 TO 10
     Message.Info("Numero " & Str$(variabile))
   NEXT 

Spiegazione

Per ogni valore da 0 a 10 che può assumere variabile, mostra il messaggio "Numero" ed il valore di variabile. In questo caso saranno mostrati tutti i messaggi con i seguenti numeri: 0-1-2-3-4-5-6-7-8-9-10.


Esempio 2 - Ciclo crescente con passo

DIM variabile AS Integer
   FOR variabile = 0 TO 10 STEP 2
     Message.Info("Numero " & Str$(variabile))
   NEXT 

Spiegazione

Per ogni valore da 0 a 10 con passo (STEP) 2 che può assumere variabile, mostra il messaggio "Numero" ed il valore di variabile. In questo caso saranno mostrati i messaggi con questi numeri: 0-2-4-6-8-10.


Esempio 3 - Ciclo decrescente con passo

DIM variabile AS Integer
   FOR variabile = 10 TO 0 STEP -2
     Message.Info("Numero " & Str$(variabile))
   NEXT 

Spiegazione

Per ogni valore da 10 a 0 con passo (STEP) -2 che può assumere variabile, mostra il messaggio "Numero" ed il valore di variabile. In questo caso saranno mostrati i messaggi con questi numeri: 10-8-6-4-2-0. Siccome per definizione di linguaggio un ciclo FOR..NEXT è crescente (1-2-3-ecc.) in caso venga omesso il comando STEP -2 non sarà mostrato alcun messaggio in quanto il nostro codice risulterà soddisfatto immediatamente.



Nota

Chi ha già esperienza di programmazione in Visual Basic avrà notato che dopo l'istruzione NEXT non è stato specificato a quale variabile si fa' riferimento:

Visual Basic = NEXT variabile

Gambas = NEXT

In realtà questo è superfluo per il semplice motivo che un ciclo FOR...NEXT è fine a se stesso e di tipo concentrico: ogni istruzione FOR deve concludersi con una istruzione NEXT.



Esempio 4 - Cicli nidificati

DIM variabile AS Integer
DIM variabile1 AS Integer
DIM variabile2 AS Integer
   FOR variabile = 0 TO 10
      FOR variabile1 = 0 TO 10
         FOR variabile2 = 0 TO 10
           Message.Info("Numero " & Str$(variabile) & Str$(variabile1) & Str$(variabile2))
         NEXT 
      NEXT
   NEXT

Spiegazione

Al primo avvio variabile assume il valore 0, variabile1 assume il valore 0 e variabile2 assume il valore 0. Il primo valore che viene incrementato è quello riferito a variabile2, quando questa arriva a 10 il sistema passa il controllo a variabile1 e così via fino a che variabile assume valore 10, variabile1 valore 10 e variabile2 valore 10. Possiamo quindi notare che all'interno di un codice FOR...NEXT composto da vari cicli nidificati la priorità di esecuzione è sempre riferita all'ultimo ciclo scritto.


Esempio 5 - Uscita anticipata

DIM variabile AS Integer
   FOR variabile = 0 TO 10
        IF variabile = 5 then 
           Message.Info("Esco dal ciclo.")
           BREAK
        ENDIF
     Message.Info("Numero " & Str$(variabile))
   NEXT

Spiegazione

Il programma mostrerà i messaggi per ogni valore di variabile da 0 a 4; quando variabile raggiunge il valore 5 il sistema uscirà (BREAK) dal ciclo e non mostrerà più alcun messaggio.


La sintassi FOR...NEXT viene in aiuto anche nel caso di loop su array e oggetti array, nel caso ci interessi solo il contenuto dell'array e non il numero di cicli effettuati:

Esempio 6 - Ciclo su array stringa

DIM variabile AS String[10]
DIM valore as String
   FOR EACH valore IN variabile
     PRINT valore
   NEXT

Spiegazione

Come si può vedere dall'esempio, sono state inserite le parole chiave EACH e IN, che indicano al ciclo di prendere tutti i valori includi nell'array 'variabile', uno per volta, di copiarli in 'valore', e di renderli disponibili alle istruzioni incluse nel loop. A questo punto pare evidente che la gestione di come e dove andare a prendere i dati è demandata al ciclo FOR, e a noi non resta che prenderci il valore restituito ogni volta, e manipolarlo come vogliamo, senza doverci neppure preoccupare di modificare l'array stesso, dato che la variabile 'value' contiene solo una copia del corrente elemento dell'array. La sintassi è valida per ogni tipo di oggetto di tipo array, comprese le Collection.