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 Do Loop

Guida al Visual Basic .NET

Capitolo 9° - Il costrutto iterativo Do Loop

<< Precedente Prossimo >>
Abbiamo visto che esistono costrutti per verificare condizioni, o anche per verificare in modo semplice e veloce molte ugualiglianze. Ora vedremo i cicli o costrutti iterativi (dal latino iter, itineris = "viaggio", ma anche "per la seconda volta"). Essi hanno il compito di ripetere un blocco di istruzioni un numero determinato o indeterminato di volte. Il primo che analizzeremo è, appunto, il costrutto Do Loop, di cui esistono molte varianti. La più semplice è ha questa sintassi:
Do
  'istruzioni
Loop  
Il suo compito consiste nel ripete delle istruzioni comprese tra Do e Loop un numero infinito di volte: l'unico modo per uscire dal ciclo è usare una speciale istruzione: "Exit Do", la quale ha la capacità di interrompere il ciclo all'istante ed uscire da esso. Questa semplice variante viene usata in un numero ridotto di casi, che si possono ricondurre sostanzialmente a due: quando si lavora con la grafica e le librerie DirectX, per disegnare a schermo i costanti cambiamenti del mondo 2D o 3D; quando è necessario verificare le condizioni di uscita dal ciclo all'interno del suo blocco di codice. Ecco un esempio di questo secondo caso:
Module Module1

    Sub Main()
        Dim a, b As Single

        Do
            'Pulisce lo schermo
            Console.Clear()
            'L'underscore serve per andare a capo nel codice
            Console.WriteLine("Inserire le misure di base e altezza " & _
                "di un rettangolo:")
            a = Console.ReadLine
            b = Console.ReadLine

            'Controlla che a e b non siano nulli. In quel caso, esce
            'dal ciclo. Se non ci fosse questo If in mezzo al codice,
            'verrebbe scritto a schermo il messaggio:
            ' "L'area del rettangolo è: 0"
            'cosa che noi vogliamo evitare. Se si usasse un'altra
            'variante di Do Loop, questo succederebbe sempre. Ecco
            'perchè, in questa situazione, è meglio
            'servirsi del semplice Do Loop
            If a = 0 Or b = 0 Then
                Exit Do
            End If

            Console.WriteLine("L'area del rettangolo è: " & (a * b))
            Console.ReadKey()
        Loop
    End Sub

End Module 
Le altre versioni del costrutto, invece, sono le seguenti:
  • Do
        'istruzioni
    Loop While [condizione]  
    Esegue le istruzioni specificate fintanto che una condizione rimane valida, ma tutte le istruzioni vengono eseguite almeno una volta, poichè While si trova dopo Do. Esempio:
    Module Module1
        Sub Main()
            Dim a As Int32 = 0
    
            Do 
                a += 1
            Loop While (a < 2) And (a > 0)
            Console.WriteLine(a)
    
            Console.ReadKey()
        End Sub
    End Module 
    Il codice scriverà a schermo "2".
  • Do While [condizione]
        'istruzioni
    Loop  
    Esegue le istruzioni specificate fintanto che una condizione rimane valida, ma se la condizione non è valida all'inizio, non viene eseguita nessuna istruzione nel blocco. Esempio:
    Module Module1
        Sub Main()
            Dim a As Int32 = 0
    
            Do While (a < 2) And (a > 0)
                a += 1
            Loop
            Console.WriteLine(a)
    
            Console.ReadKey()
        End Sub
    End Module 
    Il codice scriverà a schermo "0". Bisogna notare come le stesse condizioni del caso precedente, spostate da dopo Loop a dopo Do, cambino il risultato di tutto l'algoritmo. In questo caso, il codice nel ciclo non viene neppure eseguito perchè la condizione nel While diventa subito falsa (in quanto a = 0, e la proposizione "a < 0" risulta falsa). Nel caso precedente, invece, il blocco veniva eseguito almeno una volta poiché la condizione di controllo si trovava dopo di esso: in quel caso, a era ormai stato incrementato di 1 e perciò soddisfaceva la condizione affinché il ciclo continuasse (fino ad arrivare ad a = 2, che era il risultato visualizzato).
  • Do
        'istruzioni
    Loop Until [condizione]  
    Esegue le istruzioni specificate fino a che non viene verificata la condizione, ma tutte le istruzioni vengono eseguite almeno una volta, poichè Until si trova dopo Do. Esempio:
    Module Module1
        Sub Main()
            Dim a As Int32 = 0
    
            Do
                a += 1
            Loop Until (a <> 1)
            Console.WriteLine(a)
    
            Console.ReadKey()
        End Sub
    End Module 
    A schermo apparirà "2".
  • Do Until [condizione]
        'istruzioni
    Loop  
    Esegue le istruzioni specificate fino a che non viene soddisfatta la condizione, ma se la condizione è valida all'inizio, non viene eseguita nessuna istruzione del blocco. Esempio:
    Module Module1
        Sub Main()
            Dim a As Int32 = 0
    
            Do Until (a <> 1)
                a += 1
            Loop
            Console.WriteLine(a)
    
            Console.ReadKey()
        End Sub
    End Module 
    A schermo apparirà "0".
Un piccolo esempio finale:
Module Module1
    Sub Main()
        Dim a, b, c As Int32
        Dim n As Int32

        Console.WriteLine("-- Successione di Fibonacci --")
        Console.WriteLine("Inserire un numero oltre il quale terminare:")
        n = Console.ReadLine

        If n = 0 Then
            Console.WriteLine("Nessun numero della successione")
            Console.ReadKey()
            Exit Sub
        End If

        a = 1
        b = 1
        Console.WriteLine(a)
        Console.WriteLine(b)
        Do While c < n
            c = a + b
            b = a
            a = c
            Console.WriteLine(c)
        Loop

        Console.ReadKey()
    End Sub
End Module 


Suggerimento
Per impostare il valore di Default (ossia il valore predefinito) di una variabile si può usare questa sintassi:
Dim [nome] As [tipo] = [valore]  
Funziona solo per una variabile alla volta. Questo tipo di istruzione si chiama inizializzazione in-line.


<< 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.