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 Select Case

Guida al Visual Basic .NET

Capitolo 8° - Il costrutto Select Case

<< Precedente Prossimo >>
Abbiamo visto nel capitolo precedente come si possa far processare al computer un controllo per verificare certe condizioni. Supponiamo, ora, di avere 20 controlli di uguaglianza del tipo:
'...
If A = 1 Then
  'istruzioni
End If
If A = 2 Then
  'istruzioni
End If
If A = 3 Then
  'istruzioni
End If
'eccetera 
In questo caso il costrutto If diventa non solo noioso, ma anche ingombrante e disordinato. Per eseguire questo tipo di controlli multipli esiste un costrutto apposito, Select Case, che ha questa sintassi:
'...
Select Case [Nome variabile da analizzare]
  Case [valore1]
    'istruzioni
  Case [valore2]
    'istruzioni
  Case [valore3]
    'istruzioni
End Select 
Questo tipo di controllo rende molto più lineare, semplice e veloce il codice sorgente. Un esempio:
Module Module 1
  Sub Main()
    Dim a, b As Double
        Dim C As Byte

        Console.WriteLine("Inserire due numeri: ")
        a = Console.ReadLine
        b = Console.ReadLine
        Console.WriteLine("Inserire 1 per calcolare la somma, 2 per " & _
		la differenza, 3 per il prodotto, 4 per il quoziente:")
        C = Console.ReadLine

        Select Case C
            Case 1
                Console.WriteLine(a + b)
            Case 2
                Console.WriteLine(a - b)
            Case 3
                Console.WriteLine(a * b)
            Case 4
                Console.WriteLine(a / b)
        End Select

        Console.ReadKey()
    End Sub
End Module 
Molto semplice, ma anche molto efficace, specialmente utile nei programmi in cui bisogna considerare parecchi valori. Anche se nell'esempio ho utilizzato solamente numeri, è possibile considerare variabili di qualsiasi tipo, sia base (stringhe, date), sia derivato (strutture, classi). Ad esempio:
Dim S As String
'...
Select Case S
    Case "ciao"
        '...
    Case "buongiorno"
        '...
End Select


Varianti del costrutto

Anche in questo caso, esistono numerose varianti, che permettono non solo di verificare uguaglianze come nei casi precedenti, ma anche di controllare disuguaglianze e analizzare insiemi di valori. Ecco una lista delle possibilità:
  • Uso della virgola
    La virgola permette di definire non solo uno, ma molti valori possibili in un solo Case. Ad esempio:
    Dim A As Int32
    '...
    Select Case A
        Case 1, 2, 3
            'Questo codice viene eseguito solo se A
            'contiene un valore pari a 1, 2 o 3
        Case 4, 6, 9
            'Questo codice viene eseguito solo se A
            'contiene un valore pari a 4, 6 o 9
    End Select
    Il codice sopra proposto con Select equivale ad un If scritto come segue:
    If A = 1 Or A = 2 Or A = 3 Then
        '...
    ElseIf A = 4 Or A = 6 Or A = 9 Then
        '...
    EndIf
  • Uso di To
    Al contrario, la keyword To permette di definire un range di valori, ossia un intervallo di valori, per il quale la condizione risulta verificata se la variabile in analisi ricade in tale intervallo.
    Select Case A
        Case 67 To 90
            'Questo codice viene eseguito solo se A
            'contiene un valore compreso tra 67 e 90 (estremi inclusi)
        Case 91 To 191
            'Questo codice viene eseguito solo se A
            'contiene un valore compreso tra 91 e 191
    End Select
    Questo corrisponde ad un If scritto come segue:
    If A >= 67 And A <= 90 Then
        '...
    ElseIf A >= 91 And A <= 191 Then
        '...
    End If
  • Uso di Is
    Is è usato in questo contesto per verificare delle condizioni facendo uso di normali operatori di confronto (meggiore, minore, diverso, eccetera...). L'Is usato nel costrutto Select Case non ha assolutamente niente a che vedere con quello usato per verificare l'identicità di due oggetti: ha lo stesso nome, ma la funzione è completamente differente.
    Select Case A
        Case Is >= 6
            'Questo codice viene eseguito solo se A
            'contiene un valore maggiore o uguale di 6
        Case Is > 1
            'Questo codice viene eseguito solo se A
            'contiene un valore maggiore di 1 (e minore di 6,
            'dato che, se si è arrivati a questo Case,
            'significa che la condizione del Case precedente non
            'è stata soddisfatta)
    End Select
    Il suo equivalente If:
    If A >= 6 Then
        '...
    ElseIf A > 1 Then
        '...
    End If
  • Uso di Else
    Anche nel Select è lecito usare Else: il Case che include questa istruzione è solitamente l'ultimo di tutte le alternative possibili e prescrive di eseguire il codice che segue solo se tutte le altre condizioni non sono state soddisfatte:
    Select Case A
        Case 1, 4
            'Questo codice viene eseguito solo se A
            'contiene 1 o 4
        Case 9 To 12
            'Questo codice viene eseguito solo se A
            'contiene un valore compreso tra 9 e 12
        Case Else
            'Questo codice viene eseguito solo se A
            'contiene un valore minore di 9 o maggiore di 12,
            'ma diverso da 1 e 4
    End Select
  • Uso delle precedenti alternative in combinazione
    Tutti i modi illustrati fino ad ora possono essere uniti in un solo Case per ottenere potenti condizioni di controllo:
    Select Case A
        Case 7, 9, 10 To 15, Is >= 90
            'Questo codice viene eseguito solo se A
            'contiene 7 o 9 o un valore compreso tra 10 e 15
            'oppure un valore maggiore o uguale di 90
        Case Else
            '...
    End Select


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