Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

2.7. Beslissingen met Select Case ... End Select

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

2.7.1. Select Case ... End Select

Stel we wensen van een door de gebruiker ingevoerd getal op de console te drukken of het "One.", "Two.", "Three" of "Not one, two or three." is.
We kunnen dit oplossen door 3 If-structuren in mekaar te gaan nesten of door een ElseIf variatie van dergelijke If structuur te gebruiken.
Maar omdat we met zoveel situaties zitten kunnen we ook voor een alternatieve selectie structuur opteren, die meer leesbaarheid in de code garandeert :
Visual Basic 2012 Broncode - Codevoorbeeld 49
Module SelectCaseEndSelectExample1
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        Select Case value
            Case 1
                Console.WriteLine("One.")
            Case 2
                Console.WriteLine("Two.")
            Case 3
                Console.WriteLine("Three.")
            Case Else
                Console.WriteLine("Not one, two or three.")
        End Select
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value ?
1
One.
Console Application Output
Value ?
2
Two.
Console Application Output
Value ?
3
Three.
Console Application Output
Value ?
4
Not one, two or three.
De Select Case ... End Select structuur bekijkt een bepaalde iets, hier in ons voorbeeld bekijkt het de inhoud van value.  Er worden dan 4 gevallen ( cases) beschouwd, het geval dat value 1 is, het geval dat value 2 is, het geval dat value 3 is en het geval dat value niet 1, 2 of 3 is.

Er wordt in dit voorbeeld maar 1 instructie per geval uitgevoerd, maar men kan uiteraard ook meerdere instructies per geval gaan opgeven.

De structuur is even efficiënt als zijn If variatie.  Stel dat het ingevoerde getal niet 1, 2 of 3 is (worst case scenario), dan zullen maximaal 3 condities geëvalueerd worden.
Dit zou hetzelfde zijn bij de If variatie, waar ook 3 condities in zouden zijn gedefinieerd.
Stel dat het ingevoerde getal 1 is (best case scenario) zou hier ook slechts 1 conditie (value = 1) geëvalueerd worden, en daarna gaat het programma gewoon verder met de instructies na de Select Case ... End Select structuur.

Het Case Else gedeelte staat dus altijd als laatste gedefinieerd en bevat dus de statements die pas zullen worden uitgevoerd wanneer de te beschouwen expressie zich niet in 1 van de bovenvermelde gevallen bevindt.

Stel we wensen van een door de gebruiker ingevoerd getal op de console te drukken of het "One.", "Two, three or four.", "Number from 5 to 10." of "More than 10." is.
Visual Basic 2012 Broncode - Codevoorbeeld 50
Module SelectCaseEndSelectExample2
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        Select Case value
            Case 1
                Console.WriteLine("One.")
            Case 2, 3, 4
                Console.WriteLine("Two, three or four.")
            Case 5 To 10
                Console.WriteLine("Value from 5 to 10.")
            Case Is > 10
                Console.WriteLine("More than 10.")
        End Select
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value ?
1
One.
Console Application Output
Value ?
3
Two, three or four.
Console Application Output
Value ?
8
Value from 5 to 10.
Console Application Output
Value ?
12
More than 10.
Men kan dus een bereik opgeven door gewoon na Case een lijst van mogelijke waarden op te sommen (gescheiden door een komma), bijvoorbeeld Case 2, 3, 4, wat dus neerkomt op het geval dat number = 2 ofwel number = 3 ofwel number = 4.

Men kan ook een numeriek bereik opgeven door het laagste getal en het hoogste getal op te geven, bijvoorbeeld Case 5 To 10, wat dus neerkomt op het geval dat number = 5 ofwel number = 6 ofwel number = 7 ofwel number = 8 ofwel number = 9 ofwel number = 10.  Dit kan uiteraard enkel gebruikt worden wanneer men een numerieke expressie beschouwt, wat hier het geval is want number is een Integer variabele en stelt dus een getal voor.

Men kan ook nog eens een meer algemene voorwaarde formuleren, bijvoorbeeld Case Is > 10, wat dus neerkomt op situaties waarin number groter is dan 10.  Men plaatst na het keyword Is een vergelijkingsoperator gevolgd door de waarde waarmee men wil vergelijken.  Dit geeft dus aan dat we Case 1 ook zouden kunnen vervangen door Case Is = 1.

In dit voorbeeld zien we ook dat we niet alle gevallen moeten behandelen, als hier bijvoorbeeld een negatief getal wordt ingevoerd, dan gebeurt er gewoon niets.  Zou men toch alle gevallen willen behandelen dan zou men dit hier bijvoorbeeld weer kunnen doen door een Case Else gedeelte op te nemen.

Stel we wensen van een door de gebruiker ingevoerd getal op de console te drukken of het "More than 10.", "More than 100." of "More than 1000." is.  Dan kunnen we dit als volgt kunnen proberen te formuleren :
Visual Basic 2012 Broncode - Codevoorbeeld 51
Module SelectCaseEndSelectExample3
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        Select Case value
            Case Is > 10
                Console.WriteLine("More than 10.")
            Case Is > 100
                Console.WriteLine("More than 100.")
            Case Is > 1000
                Console.WriteLine("More than 1000.")
        End Select
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value ?
11
More than 10.
Console Application Output
Value ?
101
More than 10.
Console Application Output
Value ?
1001
More than 10.
Dit programma functioneert correct wanneer we 11 invoeren, waarbij we de melding krijgen dat het "More than 10." is.  Als we echter 101 invoeren krijgen we dezelfde melding.
Dit is niet zo vreemd want ook 101 is natuurlijk groter dan 10.  Dus hier werd meteen een goed geval gevonden, werden de bijhorende statements uitgevoerd en is men verder gegaan na de Select Case ... End Select structuur.  Maar uiteraard hadden we hier liever de melding gekregen "More than 100.".

Conclusie is dus dat je bij overlappende gevallen goed op de volgorde moet letten waarin je de gevallen definieert, we weten immers dat hetgeen dat je beschouwd zich maar maximaal in 1 gedefinieerd geval kan bevinden.

Een beter oplossing is het volgende.
Visual Basic 2012 Broncode - Codevoorbeeld 52
Module SelectCaseEndSelectExample4
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        Select Case value
            Case Is > 1000
                Console.WriteLine("More than 1000.")
            Case Is > 100
                Console.WriteLine("More than 100.")
            Case Is > 10
                Console.WriteLine("More than 10.")
        End Select
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value ?
11
More than 10.
Console Application Output
Value ?
101
More than 100.
Console Application Output
Value ?
1001
More than 1000.

2.7.2. Oefening

Opgave :

Maak een programma dat van een door de gebruiker ingevoerd getal op de console brengt of het getal "Less than -100.", "Less than -50.", "Number from -50 to -1.", "Zero.", "One or eleven.", "Number from 1 to 50.", "More than 50." of "More than 100." is.
Weest uiteraard zo precies mogelijk, 101 is bijvoorbeeld zowel "More than 100" als "More than 50.", maar hier zouden we uiteraard liefst "More than 100." als resultaat krijgen.
Console Application Output
Value ?
11
One or eleven.
Console Application Output
Value ?
101
More than 100.
Console Application Output
Value ?
-101
Less than -100.
Console Application Output
Value ?
51
More than 50.
Console Application Output
Value ?
0
Zero.
Oplossing :
Visual Basic 2012 Broncode - Codevoorbeeld 53
Module SelectCaseEndSelectExercise
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        Dim info As String
        Select Case value
            Case Is > 100
                info = "More than 100."
            Case Is > 50
                info = "More than 50."
            Case 1, 11
                info = "One or eleven."
            Case 2 To 50
                info = "Number from 1 to 50."
            Case 0
                info = "Zero."
            Case -50 To -1
                info = "Number from -50 to -1."
            Case Is < -100
                info = "Less than -100."
            Case Is < -50
                info = "Less than -50."
        End Select
        '
        Console.WriteLine(info)
        '
        Console.ReadLine()
    End Sub
End Module

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.