|
Dit artikel is gepubliceerd op zondag 31 juli 2011 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 2010 Broncode 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
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 2010 Broncode 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
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 2010 Broncode 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 SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
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 ... ] * [ Else ... ] 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 2010 Broncode 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)) End If Console.ReadLine() End SubEnd ModuleDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
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 zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|