Differenze tra le versioni di "FOR...NEXT"
Riga 1: | Riga 1: | ||
− | '''FOR''' ''variabile'' '''=''' ''valore1'' '''TO''' ''valore2'' [ '''STEP''' ''valore3'' ] | + | '''FOR''' ''variabile'' '''=''' ''valore1''' {'''TO''' | '''DOWNTO'''} ''valore2'' [ '''STEP''' ''valore3'' ] |
<<vostro codice>> | <<vostro codice>> | ||
'''NEXT''' | '''NEXT''' |
Versione delle 09:27, 3 mag 2021
FOR variabile = valore1 {'TO | DOWNTO} 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 decrescente semplice
DIM variabile AS Integer FOR variabile = 10 TO 0 STEP -1 Print variabile NEXT
oppure
DIM variabile AS Integer FOR variabile = 10 DOWNTO 0 Print variabile NEXT
Esempio 3 - 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 4 - 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 5 - 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 6 - 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 7 - 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.
Ciclo infinito
Un ciclo FOR, per terminare, deve avere una variabile del tipo adatto a raggiungere il valore che interrompe il ciclo, altrimenti si avrà un ciclo infinito. Tale valore è rappresentato da quello immediatamente superiore al valore massimo indicato nel ciclo.
Esempio:
Dim b As Byte For b = 0 To 255 Print b Next End
Poiché con una variabile di tipo Byte si possono ottenere valori he variano da 0 a 255 (in esadecimale: da "00" a "FF"), la variabile j di tipo Byte dell'esempio è incapace a raggiungere il valore superiore a 255; pertanto, si avrà un ciclo infinito.