Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida al Visual Basic .NET - Il costrutto iterativo For

Guida al Visual Basic .NET

Capitolo 10° - Il costrutto iterativo For

<< Precedente Prossimo >>
Dopo aver visto costrutti iterativi che eseguono un ciclo un numero indeterminato di volte, è arrivato il momento di analizzarne uno che, al contrario, esegue un determinato numero di iterazioni. La sintassi è la seguente:
Dim I As Int32

For I = 0 To [numero]
  'istruzioni
Next 
La variabile I, usata in questo esempio, viene definita contatore e, ad ogni step, ossia ogni volta che il blocco di istruzioni si ripete, viene automaticamente incrementata di 1, sicchè la si può usare all'interno delle istruzioni come un vero e proprio indice, per rendere conto del punto al quale l'iterazione del For è arrivata. Bisogna far notare che il tipo usato per la variabile contatore non deve sempre essere Int32, ma può variare, spaziando tra la vasta gamma di numeri interi, con segno e senza segno, fino anche ai numeri decimali. Un esempio:
Module Module1
    Sub Main()
        Dim a As Int32

        'Scrive 46 volte (da 0 a 45, 0 compreso, sono 46 numeri) 
        'a schermo 'ciao'
        For a = 0 To 45
            Console.WriteLine("ciao")
        Next
        
        Console.ReadKey()
    End Sub
End Module 
Ovviamente il valore di partenza rimane del tutto arbitrario e può essere deciso ed inizializzato ad un qualsiasi valore:
Module Module1
    Sub Main()
        Dim a, b As Int32

        Console.WriteLine("Inserisci un numero pari")
        b = Console.ReadLine

        'Se b non è pari, ossia se il resto della divisione 
        'b/2 è diverso da 0
        If b Mod 2 <> 0 Then
            'Lo fa diventare un numero pari, aggiungendo 1
            b += 1
        End If

        'Scrive tutti i numeri da b a b+20
        For a = b To b + 20
            Console.WriteLine(a)
        Next
        
        Console.ReadKey()
    End Sub
End Module 
Introduciamo ora una piccola variante del programma precedente, nella quale si devono scrivere solo i numeri pari da b a b+20. Esistono due modi per realizzare quanto detto. Il primo è abbastanza intuitivo, ma meno raffinato, e consiste nel controllare ad ogni iterazione la parità del contatore:
For a = b To b + 20
    If a Mod 2 = 0 Then
        Console.WriteLine(a)
    End If
Next 
Il secondo, invece, è più elegante e usa una versione "arricchita" della struttura iterativa For, nella quale viene specificato che l'incremento del contatore non deve più essere 1, ma bensì 2:
For a = b To b + 20 Step 2
  Console.WriteLine(a)
Next 
Infatti, la parola riservata Step posta dopo il numero a cui arrivare (in questo caso b+20) indica di quanto deve essere aumentata la variabile contatore del ciclo (in questo caso a) ad ogni step. L'incremento può essere un valore intero, decimale, positivo o negativo, ma, cosa importante, deve sempre appartenere al raggio d'azione del tipo del contatore: ed esempio, non si può dichiarare una variabile contatore di tipo Byte e un incremento di -1, poichè Byte comprende solo numeri positivi (invece è possibile farlo con SByte, che va da -127 a 128). Allo stesso modo non si dovrebbero specificare incrementi decimali con contatori interi.

Suggerimento
Se non si vuole creare una variabile apposta per essere contatore di un ciclo for, si può inzializzare direttamente una variabile al suo interno in questo modo:
For [variabile] As [tipo] = [valore] To [numero]
  'istruzioni
Next
'Che, se volessimo descrivere con un esempio, diverrebbe così:
For H As Int16 = 78 To 108
  'istruzioni
Next 

<< Precedente Prossimo >>
A proposito dell'autore

Programmatore e analista .NET 2005/2008/2010 (in particolare C# e VB.NET), anche nell'implementazione Mono per Linux. Conoscenze approfondite di Pascal, PHP, XML, HTML 4.01/5, CSS 2.1/3, Javascript (e jQuery). Conoscenze buone di C, LUA, GML, Ruby, XNA, AJAX e Assembly 68000. Competenze basilari di C++, SQL, Hlsl, Java.