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

3.2. Logische Conjunction Operator And

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.

Veronderstel dat we de som van twee ingevoerde getallen willen afdrukken indien beide getallen positief zijn.
Visual Basic 2012 Broncode - Codevoorbeeld 57
Module NestedIfExample1
    Sub Main()
        Console.WriteLine("Value 1 ?")
        Dim value1 As Integer = Console.ReadLine()
        '
        Console.WriteLine("Value 2 ?")
        Dim value2 As Integer = Console.ReadLine()
        '
        If value1 > 0 Then
            If value2 > 0 Then
                Console.WriteLine("Sum : " & (value1 + value2))
            End If
        End If
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value 1 ?
5
Value 2 ?
10
Sum : 15
Console Application Output
Value 1 ?
-5
Value 2 ?
10
Console Application Output
Value 1 ?
5
Value 2 ?
-10
Console Application Output
Value 1 ?
-5
Value 2 ?
-10
Als we dus twee If statements rechtstreeks in elkaar nesten, waarbij de ene vereist dat het eerste getal positief is en waarbij de ander vereist dat het andere getal positief is, dan zal hier dus slechts de som worden afgedrukt indien beide positief zijn.

Een alternatief hiervoor zou de logische binaire operator And zijn.  Deze combineert twee condities (twee voorwaarden/logische expressies/booleaanse expressies) en resulteert in één booleaanse expressie :
Visual Basic 2012 Broncode - Codevoorbeeld 58
Module LogicalConjunctionOperatorAndExample1
    Sub Main()
        Console.WriteLine("Value 1 ?")
        Dim value1 As Integer = Console.ReadLine()
        '
        Console.WriteLine("Value 2 ?")
        Dim value2 As Integer = Console.ReadLine()
        '
        If value1 > 0 And value2 > 0 Then
            Console.WriteLine("Sum : " & (value1 + value2))
        End If
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value 1 ?
5
Value 2 ?
10
Sum : 15
Console Application Output
Value 1 ?
-5
Value 2 ?
10
Console Application Output
Value 1 ?
5
Value 2 ?
-10
Console Application Output
Value 1 ?
-5
Value 2 ?
-10
Slechts indien beide Boolean Expressions correct (True) zijn, zal ook de totale gecombineerde booleaanse expressie correct (True) zijn.

Je zou volgende tabel kunnen opstellen :
condition-1      condition-2         condition-1 And condition-2
True             True                True
True             False               False
False            True                False
False            False               False
Beide oplossingen zullen hier (bij dezelfde input) hetzelfde resultaat geven.  Een belangrijk verschil blijft echter dat men bij de eerste versie nog steeds de mogelijkheid heeft instructies op te geven die moeten worden uitgevoerd indien slechts het eerste getal positief is.  Bij de tweede versie heeft men die mogelijkheid niet.
Bijkomend laat de eerste versie je ook toe bij het niet correct evalueren van beide voorwaarden voor beide alternatieve instructies te definiëren.  Dit zou duidelijk worden wanneer we bij wijze van foutmelding zouden vermelden dat de som niet wordt gemaakt omdat één van de getallen of beide getallen niet positief zijn :
Visual Basic 2012 Broncode - Codevoorbeeld 59
Module NestedIfExample2
    Sub Main()
        Console.WriteLine("Value 1 ?")
        Dim value1 As Integer = Console.ReadLine()
        '
        Console.WriteLine("Value 2 ?")
        Dim value2 As Integer = Console.ReadLine()
        '
        If value1 > 0 Then
            If value2 > 0 Then
                Console.WriteLine("Sum : " &
                                  (value1 + value2))
            Else
                Console.WriteLine("Value 2 not positive.")
            End If
        Else
            Console.WriteLine("Value 1 not positive.")
        End If
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value 1 ?
5
Value 2 ?
10
Sum : 15
Console Application Output
Value 1 ?
-5
Value 2 ?
10
Value 1 not positive.
Console Application Output
Value 1 ?
5
Value 2 ?
-10
Value 2 not positive.
Console Application Output
Value 1 ?
-5
Value 2 ?
-10
Value 1 not positive.
Bij gebruik van de And operator zou hier nu slechts 1 gezamenlijke foutmelding kunnen worden gegeven :
Visual Basic 2012 Broncode - Codevoorbeeld 60
Module LogicalConjunctionOperatorAndExample2
    Sub Main()
        Console.WriteLine("Value 1 ?")
        Dim value1 As Integer = Console.ReadLine()
        '
        Console.WriteLine("Value 2 ?")
        Dim value2 As Integer = Console.ReadLine()
        '
        If value1 > 0 And value2 > 0 Then
            Console.WriteLine("Sum : " &
                              (value1 + value2))
        Else
            Console.WriteLine("Value 1 and/or 2 not positive.")
        End If
        '
        Console.ReadLine()
    End Sub
End Module
Console Application Output
Value 1 ?
5
Value 2 ?
10
Sum : 15
Console Application Output
Value 1 ?
-5
Value 2 ?
10
Value 1 and/or 2 not positive.
Console Application Output
Value 1 ?
5
Value 2 ?
-10
Value 1 and/or 2 not positive.
Console Application Output
Value 1 ?
-5
Value 2 ?
-10
Value 1 and/or 2 not positive.
Het moet ook gezegd worden dat de versie met de And operator iets minder efficiënt is dan die met de geneste Ifs.

Enkel in de slechts mogelijke situatie (indien value1 positief is) moeten twee voorwaarden worden geëvalueerd, indien value1 niet positief is wordt slechts één voorwaarde geëvalueerd.

Bij gebruik van de And operator, worden de voorwaarden (die gecombineerd worden) altijd beide geëvalueerd.

Verderop zullen we zien hoe de AndAlso operator gebruikt kan worden om te vermijden dat onnodige controles gebeuren.

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