Differenze tra le versioni di "FOR...NEXT"
Riga 11: | Riga 11: | ||
---- | ---- | ||
− | + | ===Cicli semplici=== | |
+ | I cicli semplici sono cicli privi di "passo", ossia di salto nel conteggio. | ||
+ | <BR>I cicli semplici possono essere "crescenti" o "decrescenti". | ||
====Ciclo crescente semplice==== | ====Ciclo crescente semplice==== | ||
Riga 38: | Riga 40: | ||
---- | ---- | ||
− | + | ===Cicli con passo=== | |
+ | I cicli con passo sono quelli che prevedono un salto nel conteggio crescente o decrescente del valore usato nel ciclo. | ||
+ | <BR>Anche i cicli con passo possono essere "crescenti" o "decrescenti". | ||
====Ciclo crescente con passo==== | ====Ciclo crescente con passo==== | ||
Riga 79: | Riga 83: | ||
---- | ---- | ||
− | + | ===Cicli nidificati=== | |
− | |||
DIM variabile AS Integer | DIM variabile AS Integer | ||
Riga 97: | Riga 100: | ||
---- | ---- | ||
− | + | ===Uscita anticipata=== | |
− | |||
DIM variabile AS Integer | DIM variabile AS Integer | ||
Riga 113: | Riga 115: | ||
---- | ---- | ||
− | + | ===Ciclo su array stringa=== | |
− | |||
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: | 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: | ||
DIM variabile AS String[10] | DIM variabile AS String[10] | ||
Riga 128: | Riga 129: | ||
---- | ---- | ||
− | + | ===Ciclo infinito=== | |
− | |||
Un ciclo '''FOR''', per terminare, deve avere una variabile del <SPAN Style="text-decoration:underline">tipo adatto a raggiungere</span> 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. | Un ciclo '''FOR''', per terminare, deve avere una variabile del <SPAN Style="text-decoration:underline">tipo adatto a raggiungere</span> 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. | ||
Versione delle 22:33, 17 dic 2021
FOR variabile = valore1 {TO | DOWNTO} valore2 [ STEP valore3 ] <<vostro codice>> NEXT
Ripete un ciclo incrementando o decrementando un valore.
E' possibile dichiarare il tipo della variabile all'interno del ciclo "FOR":
FOR variabile As Integer = valore1 {TO | DOWNTO} valore2 [ STEP valore3 ] <<vostro codice>> NEXT
Indice
Cicli semplici
I cicli semplici sono cicli privi di "passo", ossia di salto nel conteggio.
I cicli semplici possono essere "crescenti" o "decrescenti".
Ciclo crescente semplice
DIM variabile AS Integer FOR variabile = 0 TO 10 Print 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.
Ciclo decrescente semplice
Nel caso si utilizzi la parola chiave "TO", per ottenere il ciclo decrescente è comunque necessario usare anche l'istruzione STEP accompagnata da un valore negativo ad indicare il passo. Nel caso di un ciclo decrescente semplice il passo sarà impostato a -1.
DIM variabile AS Integer FOR variabile = 10 TO 0 STEP -1 Print variabile NEXT
oppure usando l'istruzione DOWNTO:
DIM variabile AS Integer FOR variabile = 10 DOWNTO 0 Print variabile NEXT
Cicli con passo
I cicli con passo sono quelli che prevedono un salto nel conteggio crescente o decrescente del valore usato nel ciclo.
Anche i cicli con passo possono essere "crescenti" o "decrescenti".
Ciclo crescente con passo
DIM variabile AS Integer FOR variabile = 0 TO 10 STEP 2 Print 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.
Ciclo decrescente con passo
DIM variabile AS Integer FOR variabile = 10 TO 0 STEP -2 Print 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.
In caso di ciclo decrescente con passo mediante l'uso dell'istruzione DOWNTO, il valore del passo sarà invece sempre positivo.
DIM variabile AS Integer FOR variabile = 10 DOWNTO 0 STEP 2 Print variabile NEXT
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.
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.
Uscita anticipata
DIM variabile AS Integer FOR variabile = 0 TO 10 IF variabile = 5 then Message.Info("Esco dal ciclo.") BREAK ENDIF Print 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.
Ciclo su array stringa
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:
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:
Public Sub Main() Dim b As Byte For b = 0 To 255 Print b Next End
Poiché con una variabile di tipo Byte si possono ottenere valori che variano da 0 a 255 (in esadecimale: da "00" a "FF"), la variabile "b" di tipo Byte dell'esempio è incapace di raggiungere il valore superiore a 255 (ossia 256); pertanto, si avrà un ciclo infinito.