Le variabile booleane in Visual Basic Net? Le trovi su Opentraining.it Visual Basic Italia
Corso di Visual Basic:
Settima lezione - Utilizzo delle variabili Booleane (a cura di Giorgio Abraini)

Nella scorsa lezione abbiamo visto cosa sono le variabili booleane e quali operazioni si possono fare con esse: ora vediamo come si usano. L'istruzione principale che fa uso di espressioni booleane è il costrutto

"if condizione then istruzione"

che, come dice il nome, esegue una o più istruzioni se si verifica una certa condizione. Ad esempio, l'istruzione:

If lblName.Visible = True Then lblName.Caption = "Pippo"

aggiorna la proprietà Caption dell'etichetta lblName se questa etichetta è visibile: il tipo della proprietà Visible, infatti, è proprio Boolean. Quando Visual Basic deve eseguire un'istruzione come quella riportata, prima di tutto verifica se l'espressione compresa tra le parole chiave If e Then è vera o falsa: se l'etichetta è visibile (cioè se la proprietà visible è uguale a True), la condizione è verificata e quindi sarà eseguita l'istruzione seguente la parola chiave Then; altrimenti la condizione non sarà verificata e l'istruzione sarà del tutto ignorata. Solitamente i programmatori VB ("VB" è ovviamente l'abbreviazione di Visual Basic…) utilizzano una sintassi leggermente diversa, organizzata su più di una riga (cosiddetta a blocco):

If lblName.Visible = True Then
lblName.Caption = "Pippo"
End If
In Visual Basic di solito si inserisce una istruzione per ogni riga, poiché è sufficiente il ritorno a capo per far capire a Visual Basic che l'istruzione è terminata; nel caso della IfThen, quindi, è possibile far stare tutta l'istruzione sulla stessa riga, ma se le istruzioni che seguono Then vengono riportate nelle righe successive, è necessario indicare dove finiscono le istruzioni appartenenti al blocco If, e questo si fa appunto con la parola chiave End If, esattamente come si fa con End Sub o End Function per indicare la fine di una subroutine o di una funzione.
Personalmente ritengo che la seconda sintassi sia più chiara e comoda, soprattutto quando le istruzioni da eseguire nel blocco sono più di una: infatti, se volessimo utilizzare la sintassi su una singola riga, bisognerebbe separare le varie istruzioni con i ":", ad esempio:

If lblName.Visible = True Then lblName.Caption = "Pippo": Form1.Caption = "Pippo": ...

(nota: il carattere " : " può essere utilizzato per riunire più istruzioni sulla stessa riga anche al di fuori di un'istruzione IfThen) L'istruzione IfThen permette di eseguire certe istruzioni anche nel caso in cui la condizione non sia verificata: ciò è possibile grazie alla parola chiave Else, ad esempio:

If strName = "Pippo" Then
frmProva.Show
Else
frmProva.Hide
End If
Se la variabile stringa strName è uguale a "Pippo", il form frmProva viene mostrato, altrimenti viene nascosto.
In questo modo è possibile ottenere una certa flessibilità nell'esecuzione condizionale di un gruppo di istruzioni; questa flessibilità è ulteriormente aumentata dalla possibilità di utilizzare la parola chiave ElseIf:

If strName = "Pippo" Then
frmProva.Show
frmProva.lblName.Caption = "Pippo"
ElseIf strName = "Topolino" Then
frmProva.Show
frmProva.lblName.Caption = "Minnie"
ElseIf strName = "Pluto" Then
frmProva.Show
frmProva.lblName.Caption="Orazio"
Else
frmProva.Hide
End If
In un blocco di questo tipo, Visual Basic comincia a verificare le condizioni una per una: quando una delle condizioni è verificata, vengono eseguite le istruzioni relative a quella condizione, ignorando le altre; se nessuna delle condizioni è verificata, vengono eseguite le istruzioni comprese nella clausola else, se è presente: altrimenti non viene eseguita alcuna istruzione. Infatti le clausole Else e ElseIf sono facoltative.
All'interno di ogni blocco IfThen è possibile inserire qualunque istruzione, anche un'altra IfThen (si parla dei cosiddetti blocchi annidati); ad esempio si potrebbe fare:

If intX > 10 Then
If intX > 100 Then
intY = intX / 2
Else
intY = intX + 10
End If
ElseIf intX > 5 Then
intY = 0
Else
bValue = True
End If
In questo blocco viene valutato il valore della variabile Integer intX: se è maggiore di 10, viene effettuato un ulteriore controllo: se intX è maggiore di 100, viene posto intY = intX/2, altrimenti intY = intX+10; se invece intX non è maggiore di 10 (cioè intX <= 10), Visual Basic controlla se intX > 5: in questo caso si pone intY = 0. Se infine intX <= 5, la variabile booleana bValue viene impostata a True. E' chiaro quindi che l'istruzione IfThen permette di effettuare confronti flessibili e ramificati per determinare quali istruzioni è opportuno eseguire.
Ma non basta: le condizioni da valutare possono essere espressioni anche molto complesse, utilizzando gli operatori logici che abbiamo visto nella lezione precedente; ad esempio:

If ((intX> 10 And intX < 100) Or (intX > 200 And intX<= intY / 3)) Imp bValue = False Then
...
End If
La valutazione della condizione segue le regole generali per l'uso delle parentesi: dapprima viene confrontato il valore di intX con 10 e con 100: se è compreso tra questi due valori (esclusi gli estremi), l'espressione nella prima sotto-parentesi sarà True;
poi intX viene confrontato con 200 e con intY / 3: se è compreso tra questi due valori, la seconda sotto-parentesi sarà True; se almeno una delle due sotto-parentesi è True, anche la super-parentesi sarà True. Infine viene confrontata la variabile bValue con il valore False: se bValue è False, l'espressione "bValue = False" sarà True, e quindi lo sarà anche l'intera condizione valutata dalla If (infatti l'operatore Imp restituisce sempre True se la seconda espressione è True: v.lezione precedente); se invece bValue = True, la seconda espressione sarà False: in tal caso l'intera condizione sarà True solo se anche la super-parentesi sarà False. Un esempio dovrebbe chiarire tutto: supponiamo che intX = 90, intY = 600, bValue = True; allora avremo:

If ((True And True) Or (False And True)) Imp False Then
che corrisponde a:

If (True Or False) Imp False Then
che corrisponde a:


If True Imp False Then
SiccomeTrue Imp False restituisce False, le istruzioni successive a Then non saranno eseguite. Vi faccio notare che Visual Basic valuta sempre tutte le espressioni, anche se in qualche caso è inutile; supponiamo ad esempio di avere:

If intX > 10 And intX < 20 Then
con intX = 5; sapendo che intX > 10 è False e che il valore della condizione dipende dall'operatore And, si potrebbe anche fare a meno di confrontare intX con 20, perché qualunque sia il risultato di questo confronto la condizione sarà comunque False, dato che la prima espressione è False e l'And restituisce True solo se entrambe le espressioni sono True.
In effetti alcuni linguaggi più "intelligenti" (ad esempio il C++) evitano i confronti inutili; Visual Basic invece li fa sempre tutti, e nel caso di controlli pesanti bisognerebbe tenerne conto, facendo in modo che vengano valutate solo le espressioni strettamente necessarie. Ad es., l'istruzione:

If intX > 10 And intX < 20 Then
intX = intX * 2
End If
potrebbe essere modificata in questo modo:

If intX > 10 Then
if intX < 20 Then
IntX = IntX * 2
End If
End If
In questo modo, se intX=5, Visual Basic non perde tempo a confrontare intX con 20, perché già la prima condizione è falsa, e quindi il secondo blocco If sarà ignorato.

Archivio:ndexed
Lezioni Commenta questa lezione Invia la tua guida Avviso per le nuove lezioni
Proponi un argomento

Visual Basic Italia© copyright 2000 - tutti i diritti riservati
E-mail:
vbitalia@libero.it