Looking for ruby Keywords? Try Ask4Keywords

Ruby Language Besturingsstroom met logische instructies


Voorbeeld

Hoewel het contra-intuïtief lijkt, kunt u logische operatoren gebruiken om te bepalen of een instructie al dan niet wordt uitgevoerd. Bijvoorbeeld:

File.exist?(filename) or STDERR.puts "#{filename} does not exist!"

Hiermee wordt gecontroleerd of het bestand bestaat en wordt alleen het foutbericht afgedrukt als dit niet het geval is. De instructie or is lui, wat betekent dat deze stopt met uitvoeren zodra het zeker is of de waarde waar of onwaar is. Zodra de eerste term waar blijkt te zijn, hoeft de waarde van de andere term niet te worden gecontroleerd. Maar als de eerste term vals is, moet deze de tweede term controleren.

Een algemeen gebruik is om een standaardwaarde in te stellen:

glass = glass or 'full' # Optimist! 

Dat stelt de waarde van glass op 'vol' als het nog niet is ingesteld. Korter, u kunt de symbolische versie gebruiken van or :

glass ||= 'empty' # Pessimist. 

Het is ook mogelijk om de tweede instructie alleen uit te voeren als de eerste onwaar is:

File.exist?(filename) and puts "#{filename} found!"

Nogmaals, and is lui, dus het zal alleen de tweede instructie uitvoeren als dat nodig is om tot een waarde te komen.

De operator or heeft een lagere prioriteit dan and . Evenzo || heeft een lagere prioriteit dan && . De symboolvormen hebben een hogere prioriteit dan de woordvormen. Dit is handig om te weten wanneer je deze techniek met opdracht wilt combineren:

a = 1 and b = 2
#=> a==1
#=> b==2
a = 1 && b = 2; puts a, b
#=> a==2
#=> b==2

Merk op dat de Ruby Style Guide aanbeveelt :

De and en or sleutelwoorden zijn verboden. De minimale toegevoegde leesbaarheid is de grote kans op het introduceren van subtiele bugs gewoon niet waard. Gebruik voor booleaanse uitdrukkingen altijd && en || in plaats daarvan. Gebruik if en unless voor stroomregeling; && en || zijn ook acceptabel, maar minder duidelijk.