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.7. Logische Kortsluitings Operatoren AndAlso en OrElse

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.

3.7.1. Logische Kortsluitings Operator AndAlso

Veronderstel opnieuw dat we de som van twee ingevoerde getallen wensen af te drukken slechts indien ze beide positief zijn.  Dan weten we ondertussen dat we hiervoor de operator And kunnen gebruiken :
Visual Basic 2012 Broncode - Codevoorbeeld 70
Module AndExample
    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
Eigenlijk is het beter hiervoor de AndAlso operator te gebruiken.
Visual Basic 2012 Broncode - Codevoorbeeld 71
Module AndAlsoExample
    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 AndAlso 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
Het verschil zit hem in de efficiëntie.  We weten dat bij de And operator het resultaat steeds False zal zijn als de eerste operand reeds False is :
condition-1   condition-2     condition-1 And(Also) condition-2
True          True            True
True          False           False
False         True            False
False         False           False
Het heeft dan ook geen nut de tweede operand te evalueren als het resultaat reeds gekend is.  En dit is net wat vermeden wordt bij de kortsluitingsoperator AndAlso.

Vergelijkbaar is er ook een OrElse kortsluitingsoperator.

3.7.2. Logische Kortsluitings Operator OrElse

Bij de Or operator kan je stellen dat het resultaat reeds True zal zijn als de eerste operand naar True evalueert, dus is het onnodig de tweede operand nog te evalueren.  En dat is net wat de kortsluitingsoperator OrElse vermijdt.
condition-1   condition-2     condition-1 Or(Else) condition-2
True          True            True
True          False           True
False         True            True
False         False           False
Van de Xor operator kon men uiteraard geen kortsluitingsvariant creëren gezien steeds exclusiviteit dient te zijn tussen de operanden, waardoor ze steeds beide geëvalueerd moeten worden.

Het valt dus aan te raden altijd de kortsluitingsoperatoren AndAlso en OrElse te verkiezen boven de gewone And en Or operatoren.
Slechts in uitzonderlijke omstandigheden komen de gewone And en Or operatoren nog van pas, deze omstandigheden worden in een volgend topic behandeld.

3.7.3. Oefeningen

Opgave :

Bouw een selectie structuur (naar analogie met de Xor operator, maar zonder die te gebruiken) die slechts indien 1 van de 2 ingelezen getallen verschillend is van 0 de som gaat afdrukken.
Console Application Output
Value 1 ?
5
Value 2 ?
-10
Sum : -5
Console Application Output
Value 1 ?
-5
Value 2 ?
10
Sum : 5
Console Application Output
Value 1 ?
5
Value 2 ?
10
Console Application Output
Value 1 ?
-5
Value 2 ?
-10
Oplossing :
Visual Basic 2012 Broncode - Codevoorbeeld 72
Module XorExercise
    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 AndAlso Not value2 <> 0 OrElse _
           Not value1 <> 0 AndAlso value2 <> 0 Then
            Console.WriteLine("Sum : " & (value1 + value2))
        End If
        '
        Console.ReadLine()
    End Sub
End Module
Opgave :
Maak een programma dat de som maakt van ingelezen getallen, zolang een getal wordt ingelezen dat ligt tussen 10 en 20 (10 en 20 exclusief), groter is dan 100 (exclusief 100) of "kleiner of gelijk is" aan 0.

Doe dit zowel met een Do While ... Loop als met een Do Until ... Loop.
Console Application Output
Value ?
15
Value ?
150
Value ?
0
Value ?
-5
Value ?
5
Sum : 160
Oplossing :
Visual Basic 2012 Broncode - Codevoorbeeld 73
Module DoLoopExercise
    Sub Main()
        Dim value, sum As Integer
        '
        ' 'Do While ... Loop' :
        Do While (value > 10 AndAlso value < 20) OrElse _
                 (value > 100) OrElse (value <= 0)
            sum = sum + value
            Console.WriteLine("Value ?")
            value = Console.ReadLine()
        Loop
        '
        '' 'Do Until ... Loop' : version 1 :
        'Do Until Not ((value > 10 AndAlso value < 20) OrElse _
        '              (value > 100) OrElse (value <= 0))
        '    sum = sum + value
        '    Console.WriteLine("Value ?")
        '    value = Console.ReadLine()
        'Loop
        '
        '' 'Do Until ... Loop' : version 2 :
        'Do Until (value <= 10 OrElse value >= 20) AndAlso _
        '         (value <= 100) AndAlso (value > 0)
        '    sum = sum + value
        '    Console.WriteLine("Value ?")
        '    value = Console.ReadLine()
        'Loop
        '
        Console.WriteLine("Sum : " & sum)
        '
        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.