Zoals if statements, die je programma de mogelijkheid geven om beslissingen te nemen, kunnen switch statements gebruikt worden om een beetje intelligentie in elk programma te brengen. In feite is een switch-statement een gespecialiseerde versie van een if-statement, dat anders een overmatige hoeveelheid ELSE IF
type-statements zou bevatten.
Laten we eens kijken waarom ze worden gebruikt.
Soms kom je bij het inbouwen van logica in je programma’s een situatie tegen waarin je, gegeven de waarde van een bepaald stukje data, iets anders wilt doen. Normaal gesproken zou je dit kunnen afdekken met een if statement, maar wat als je rekening wilt houden met 5, 10, zelfs 20 mogelijke situaties?
Bij gebruik van een if statement zou je programma al snel een warboel van if statement syntax worden, en het zou niet erg leesbaar of duidelijk zijn wat er aan de hand is. Programmeurs realiseerden zich dit en zo werden Switch Statements geboren!
Switch Statement Structure
Een switch statement neemt een enkele waarde, vergelijkt die dan met een stel andere waarden met behulp van een booleaanse uitdrukking. Als een van deze booleaanse uitdrukkingen waar is, wordt een specifiek stuk code uitgevoerd.
Met deze structuur kunt u eenvoudig een waarde toewijzen aan een stukje code dat moet worden uitgevoerd. Bekijk hieronder een eenvoudig switch statement om een idee te krijgen van de syntaxis in Ruby:
Copymy_grade = "A "case my_grade when "A" puts "You Pass" when "F" puts "You fail" else puts "Invalid grade "end
Zoals je hierboven kunt zien, beginnen we met een waarde myGrade
. In wezen willen we uitprinten of de leerling is geslaagd of gezakt gezien zijn cijfer (A of F).
Nu we onze waarde hebben, willen we een serie case statements opzetten. Deze case statements zijn in wezen de rechterkant van een booleaanse expressie voor gelijkheid. Ruby zal myGrade
vergelijken met elk van de waarden in de case statements (‘A’ en ‘F’) voor gelijkheid. Als er een overeenkomst is, dan zal de code direct onder de case statement worden uitgevoerd.
Breaks
Een ding dat belangrijk is om in gedachten te houden met switch statements is dat Ruby standaard zal proberen ze allemaal te controleren op gelijkheid, zelfs als het een overeenkomst krijgt. Dit is anders dan bij een ELSE IF
structuur waar, zodra een voorwaarde waar is, het stopt met het controleren van de voorwaarden eronder.
Omdat Ruby automatisch elk geval zal controleren, wat er ook gebeurt, hebben we een manier nodig om dit te voorkomen (meestal wil je dit voorkomen). In het geval van een overeenkomst, wil ik dat het switch statement stopt met het controleren van de andere gevallen.
Dat is waar het break
sleutelwoord in het spel komt. Het break keyword vertelt Ruby dat we klaar zijn met het switch statement, en dat het het moet afbreken en verder gaan.
Persoonlijk heb ik al heel wat bugs in programma’s tegengekomen doordat ik vergeten was om break statements in te voegen. Houd dit dus in je achterhoofd.
Default
Als je de switch-opdracht hierboven bekijkt, zie je ook het default
sleutelwoord. Dit sleutelwoord lijkt veel op een ELSE
in een if statement structuur. Elke code onder het if statement zal worden uitgevoerd als geen van de andere gevallen een match krijgt. Merk ook op dat we geen break statement nodig hebben binnen de default.
In het algemeen, wanneer je een situatie hebt waarin je een switch gebruikt, vangt de standaard alle situaties op die je niet wilt specificeren in een case statement.
In het geval van het bovenstaande programma drukt het Invalid Grade
af voor elk cijfer dat geen A
of een F
is.
Wrapping it up
In de praktijk worden switch statements veel minder vaak gebruikt dan if statements. De reden hiervoor is dat er veel minder situaties zijn waarin een switch statement geschikt is boven een if statement. Een goede vuistregel is echter dat als je een waarde moet vergelijken met een aantal andere waarden, je misschien een switch nodig hebt!