Corso di Visual Basic

Le strutture di controllo II

 

Terminiamo oggi la parte relativa alle strutture di controllo introducendo gli ultimi due costrutti.

Cicli Do While.. Loop e Do Until .. Loop

La struttura Do...Loop consente di eseguire un blocco di istruzioni per un numero di volte imprecisato (contrariamente al FOR).  L'istruzione Do...Loop valuta una condizione che consente di determinare se continuare o meno l'esecuzione. Come per la struttura If...Then, la condizione deve essere rappresentata da un valore o da un'espressione che risulti Vera o Falsa. La parola chiave DO identifica l’inizio del ciclo, mentre LOOP indica la fine.
Esistono 4 varianti del ciclo Do…Loop; le prime due sono determinate dalla differenza tra While ed Until.
In presenza di un While un ciclo viene eseguito fino a che la condizione risulta Vera; non appena la condizione diventa falsa, il ciclo viene interrotto.

Viceversa l’Until viene eseguito finchè la condizione non è verificata ed è interrotto non appena diventa Vera.
E‘ possibile diversificare ulteriormente il ciclo Do..Loop mettendo la condizione all’inizio (dopo il DO) oppure alla fine, dopo la parola chiave LOOP, la differenza sostanziale è che, mettendo la condizione alla fine, il ciclo viene eseguito sicuramente almeno una volta anche se la condizione di partenza non è Vera.
Abbiamo dunque ottenute le seguenti combinazioni:

Do While condizione     Do
  <istruzioni>            <istruzioni>
Loop                    Loop While condizione

Do Until condizione     Do
 <istruzioni>             <istruzioni>
Loop                    Loop Until condizione

Esempio:
stampiamo CIAO finchè l’utente non risponde NO alla domanda “Vuoi stampare?” nei quattro possibili casi:
Private Sub CmdStampa_Click()
  Do While (MsgBox("Vuoi stampare?", vbYesNo) = vbYes)
     Print "CIAO"
  Loop
End Sub

Lo stesso risultato si ottiene utilizzando il DO UNTIL e quindi negando la condizione precedente

Do Until (MsgBox("Vuoi stampare?", vbYesNo) = vbNo)
     Print "CIAO"
Loop


Un risultato leggermente diverso lo possiamo avere mettendo la condizione alla fine: nei due casi precedenti CIAO non viene stampanto se l’utente risponde NO alla prima domanda, mettendo la condizione alla fine, CIAO  viene stampato sicuramente almeno  una volta:

Do
  Print "CIAO"
Loop While (MsgBox("Vuoi stampare?", vbYesNo) = vbYes)


Do
   Print “CIAO”
Loop Until (MsgBox("Vuoi stampare?", vbYesNo) = vbNo)


Utilizzando il ciclo
Do..Loop è possibile riprodurre il costrutto FOR, in questo caso ovviamente, bisogna farsi carico di inizializzare ed incrementare il contatore.
Esempio:
riprendiamo il ciclo che visualizza i numeri  da 0 a 10

Dim Conta as integer
Conta=0
Do While Conta <= 10
   Msgbox Str(Conta)
   Conta=Conta+1
Loop


ATTENZIONE!
In cicli di questo tipo è bene non dimenticarsi l’incremento del contatore, in tal caso, infatti, la condizione non diventa mai Vera e si genera un LOOP INFINITO.

L’istruzione Select Case
Select Case è analogo a If...Then...Else, ma è più indicato e migliora la leggibilità del codice nel caso di più scelte.
Si basa su un'unica espressione di prova che viene valutata una volta all'inizio della struttura stessa. Il risultato di tale espressione viene confrontato con il valore di ciascuna istruzione Case della struttura e in caso di corrispondenza viene eseguito il blocco di istruzioni associato all'istruzione Case:
Select Case <espressione>
[Case <espressione1>
     [bloccoistruzioni-1]]
[Case <espressione2>
     [bloccoistruzioni-2]]
.
..
[Case Else
     [bloccoistruzioni-n]]
End Select

Esempio:
La MsgBox (vedere approfondimento dopo) può restituire 3 risultati differenti (esempio SI, NO, ANNULLA), in tal caso avremmo bisogno di 2 costrutti IF per valutare le istruzioni da eseguire.
In tal caso è consigliabile utilizzare il Select..Case

Private Sub CmdProva_Click()
  Dim Ris As Integer
    Ris = MsgBox("Che tasto hai scelto", vbYesNoCancel)
    Select Case Ris
    Case vbYes
         Msgbox “SI”
    Case vbNo
         MsgBox "NO"
    Case vbCancel
         MsgBox "ANNULLA"
    Case Else
    End Select
End Sub

Approfondimenti sulla Msgbox
Avevamo anticipato la MsgBox (lezione 6) alla quale possiamo indicare la frase da visualizzare. Oltre a questa frase, possiamo specificare altre caratteristiche (denominate parametri).  La sua sintassi completa è:
MsgBox(prompt[, buttons] [, title] [, helpfile, context])
Dove: 
Prompt è la frase che viene visualizzata.
buttons è un valore numerico (solitamente rappresentato da costanti fornite dal linguaggio) che rappresenta i bottoni che saranno visualizzati (esempio SI, No, OK, Annulla). Se è omesso vale 0, ovvero visualizza il solo tasto OK.
Alcuni possibili valori sono:
vbOKOnly           (equivale al numero 0) visualizza solo il pulsante OK.
VbOKCancel         (    “         “    1) visualizza i pulsanti OK e Annulla.
VbAbortRetryIgnore (    “         “    2) visualizza i pulsanti Termina, Riprova, e Ignora.
VbYesNoCancel      (    “         “3) visualizza i pulsanti Sì, No e Annulla.
VbYesNo            (    “         “    4) visualizza i pulsanti Sì e No.
Title è la frase visualizzata nella barra del titolo della finestra di dialogo; se viene omesso verrà indicato il nome dell'applicazione.
Help e context servono nel caso in cui il nostro programma preveda una guida in linea.

Msgbox è una funzione e come tale, restituisce un valore. Il valore restituito dalla funzione MsgBox corrisponde al tasto scelto dall’utente tra quelli visualizzati. I possibili valori che può assumere sono:

vbOK     (equivale al numero 0) e corrisponde alla scelta del pulsante OK
vbCancel (    “        “     2) “       “             “        “       Annulla
vbAbort  (    “        “     3) “       “             “        “       Termina
vbRetry  (    “        “     4) “       “             “        “       Riprova
vbIgnore (    “        “     5) “       “             “        “       Ignora
vbYes    (    “        “     6) “       “             “        “       Sì
vbNo     (    “        “     7) “       “             “        “       No


Finalmente conosciamo i costrutti che stanno alla base del linguaggio BASIC.

La prossima volta ci aspetta un’altra “avventura”: le procedure e le funzioni. Non mancate!

 

Torna all'indice Generale del corso di Corso di Visual Basic di Software Planet