Hoe de Case / Switch-verklaring in Ruby te gebruiken

In de meeste computertalen, het geval of voorwaardelijk (ook bekend als schakelaar) statement vergelijkt de waarde van een variabele met die van meerdere constanten of literalen en voert het eerste pad uit met een bijpassende case. In Robijn, het is een beetje flexibeler (en krachtiger).

In plaats van dat er een eenvoudige gelijkheidstest wordt uitgevoerd, wordt de case-gelijkheidsoperator gebruikt, waardoor de deur voor veel nieuwe toepassingen wordt geopend.

Er zijn echter enkele verschillen met andere talen. In C, een switch-statement is een soort vervanging voor een reeks van als en ga naar verklaringen. De koffers zijn technisch labels, en de switch statement zal naar het overeenkomende label gaan. Dit vertoont een gedrag dat "fallthrough" wordt genoemd, omdat de uitvoering niet stopt wanneer het een ander label bereikt.

Dit wordt meestal vermeden met een break-statement, maar fallthrough is soms opzettelijk. De casusverklaring in Ruby daarentegen kan worden gezien als een afkorting voor een reeks van

instagram viewer
als verklaringen. Er is geen fallthrough, alleen de eerste matching case wordt uitgevoerd.

Het basisformulier van een casusverklaring

De basisvorm van een casusverklaring is als volgt.

Zoals u kunt zien, is dit zo gestructureerd als een voorwaardelijke instructie if / else if / else. De naam (die we de waarde), in dit geval ingevoerd vanaf het toetsenbord, wordt vergeleken met elk van de gevallen van de wanneer clausules (d.w.z. gevallen), en de eerste wanneer blok met een bijpassende case wordt uitgevoerd. Als geen van beide overeenkomt, is de anders blok zal worden uitgevoerd.

Wat hier interessant is, is hoe de waarde wordt vergeleken met elk van de gevallen. Zoals hierboven vermeld, in C ++en andere C-achtige talen wordt een eenvoudige waardevergelijking gebruikt. In Ruby wordt de case-gelijkheidsoperator gebruikt.

Onthoud dat het type van de linkerkant van een operator voor gelijkheid van zaken belangrijk is en dat de gevallen altijd de linkerkant zijn. Dus voor elk wanneer clausule, zal Ruby evalueren case waarde totdat het een match vindt.

Als we iets zouden invoeren Bob, Zou Ruby eerst evalueren "Alice" "Bob", wat niet waar zou zijn sinds Draad# wordt gedefinieerd als de vergelijking van de strings. De volgende, /"qrzunette.+/i "Bob" zou worden uitgevoerd, wat niet waar is sinds Bob begint niet met Q, R of Z.

Aangezien geen van de gevallen overeenkomt, zal Ruby de clausule else uitvoeren.

Hoe het type in het spel komt

Een algemeen gebruik van de case-instructie is om het type waarde te bepalen en iets anders te doen, afhankelijk van het type. Hoewel dit Ruby's gebruikelijke eendtypering doorbreekt, is het soms nodig om dingen voor elkaar te krijgen.

Dit werkt met behulp van de Klasse# (technisch gezien de Module #) operator, die test of de rechterkant is een? linkerkant.

De syntaxis is eenvoudig en elegant:

Een andere mogelijke vorm

Als de waarde is weggelaten, werkt de case-instructie een beetje anders: het werkt bijna precies zoals een if / else if / else-instructie. De voordelen van het gebruik van de case-instructie ten opzichte van eenals verklaring, in dit geval, zijn louter cosmetisch.

Een compactere syntaxis

Soms zijn er een groot aantal kleine wanneer clausules. Zo'n casusverklaring wordt gemakkelijk te groot om op het scherm te passen. Wanneer dit het geval is (geen bedoelde woordspeling), kunt u de gebruiken vervolgens trefwoord om de body van de wanneer clausule op dezelfde regel.

Hoewel dit voor een zeer dichte code zorgt, zolang ze maar elk zijn wanneer clausule lijkt erg op elkaar, het wordt eigenlijk meer leesbaar.

Wanneer u single-line en multi-line zou moeten gebruiken wanneer clausules aan u zijn, is het een kwestie van stijl. Het mengen van de twee wordt echter niet aanbevolen - een case-statement moet een patroon volgen om zo leesbaar mogelijk te zijn.

Case Toewijzing

Net als if-instructies, worden case-instructies geëvalueerd naar de laatste instructie in de wanneer clausule. Met andere woorden, ze kunnen in opdrachten worden gebruikt om een ​​soort tafel te vormen. Vergeet echter niet dat case-statements veel krachtiger zijn dan eenvoudige array- of hash-zoekopdrachten. Zo'n tafel hoeft niet per se letterlijke tekens te gebruiken in de wanneer clausules.

Als er geen overeenkomst is wanneer clausule en geen clausule anders, dan wordt de case-instructie geëvalueerd nihil.

instagram story viewer