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.6. Beslissingen met If ... ElseIf ... End If

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.

Stel we wensen van een door de gebruiker ingevoerd getal op de console te brengen of het getal "Zero.", "Positive value." of "Negative value." is.
We hebben dus 3 situaties waarin het programma een verschillende actie moet ondernemen, namelijk een verschillende tekst op de console brengen.  Zoals we reeds gezien hadden kunnen we aan de hand van een geneste selectie structuur dit gaan oplossen.
Visual Basic 2012 Broncode - Codevoorbeeld 45
Module NestedIfElseEndIfExample1
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        If value = 0 Then
            Console.WriteLine("Zero.")
        Else
            If value > 0 Then
                Console.WriteLine("Positive value.")
            Else
                Console.WriteLine("Negative value.")
            End If
        End If
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value ?
0
Zero.
Console Application Output
Value ?
5
Positive value.
Console Application Output
Value ?
-5
Negative value.
We kunnen echter ook 3 selecties in sequentie plaatsen.
Visual Basic 2012 Broncode - Codevoorbeeld 46
Module IfsInSequenceExample
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        If value = 0 Then Console.WriteLine("Zero.")
        If value > 0 Then Console.WriteLine("Positive value.")
        If value < 0 Then Console.WriteLine("Negative value.")
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value ?
0
Zero.
Console Application Output
Value ?
5
Positive value.
Console Application Output
Value ?
-5
Negative value.
We merken dus op dat als er geen Else gedeelte is opgenomen en dat je indien je slechts 1 instructie wil laten uitvoer als de voorwaarde correct is, je de volledige selectie structuur op 1 regel kunt plaatsen.  Ook de afsluitende End If kan/moet hierbij dus worden weggelaten.

Deze 2e versie is echter iets minder efficiënt.  In de eerste versie moeten in het slechtste geval (getal is niet 0) twee voorwaarden worden geëvalueerd.  Omdat in deze 2e versie de 3 If statements in sequentie op elkaar volgen, zullen ze in elke geval (zowel beste als slechte geval) alle 3 worden geëvalueerd.

Een ander variatie kan worden opgebouwd aan de hand van ElseIf.
Visual Basic 2012 Broncode - Codevoorbeeld 47
Module IfElseIfElseEndIfExample
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        If value = 0 Then
            Console.WriteLine("Zero.")
        ElseIf value > 0 Then
            Console.WriteLine("Positive value.")
        Else
            Console.WriteLine("Negative value.")
        End If
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value ?
0
Zero.
Console Application Output
Value ?
5
Positive value.
Console Application Output
Value ?
-5
Negative value.
Hier zie je het gebruik van het optionele ElseIf gedeelte, hierbij kan je een bijkomende voorwaarde definiëren.  Deze bijkomende voorwaarde zal slechts geëvalueerd worden wanneer aan de conditie erboven niet was voldaan.  Dus deze versie is even efficiënt als de eerste versie, in het slechtste geval worden dus ook twee voorwaarden geëvalueerd.

Het ElseIf gedeelte is optioneel, maar mag wel meerdere keren voorkomen.  De instructies bij het Else gedeelte zullen bij dergelijke variant dus pas worden uitgevoerd wanneer aan geen enkele van de bovenstaande condities is voldaan.

De syntax van het If statement zou je dus als volgt kunnen beschrijven :
  If <condition> Then
     ...
[ ElseIf <other-condition> Then
     ... ] *                    ' optional, can be used more than once
[ Else
    ... ]                       ' optional, can be used once
  End If
Wat in syntax tussen vierkante haakjes wordt aangeduid is steeds optioneel.

Ondanks dat de eerste en derde versie even efficiënt zijn, zou de voorkeur toch kunnen uitgaan naar de eerste versie.  Veronderstel bijvoorbeeld dat als het om een positief of negatief getal gaat, we nog eens het dubbele van dat getal wensen af te drukken, dan kunnen we dit oplossen door aan de eerste versie gewoon 1 regel toe te voegen.
Visual Basic 2012 Broncode - Codevoorbeeld 48
Module NestedIfElseEndIfExample2
    Sub Main()
        Console.WriteLine("Value ?")
        Dim value As Integer = Console.ReadLine()
        '
        If value = 0 Then
            Console.WriteLine("Zero.")
        Else
            If value > 0 Then
                Console.WriteLine("Positive value.")
            Else
                Console.WriteLine("Negative value.")
            End If
            Console.WriteLine("Double : " & (value * 2))                 ' added
        End If
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value ?
0
Zero.
Console Application Output
Value ?
5
Positive value.
Double : 10
Console Application Output
Value ?
-5
Negative value.
Double : -10
In versie 3 hadden we al op 2 plaatsen dergelijke regel moeten toevoegen.  Meerdere identieke regels in een algoritme is vaak iets wat beter te vermijden valt, de onderhoudbaarheid van dergelijke code is minder goed.  Stel je voor dat je in plaats van het dubbele de helft wenst, dan zou je op 2 plaatsen in de code een wijziging moeten aanbrengen.

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