Looking for ruby Keywords? Try Ask4Keywords

Ruby Language Kontrollfluss mit logischen Anweisungen


Beispiel

Auch wenn dies nicht intuitiv erscheinen mag, können Sie mit logischen Operatoren feststellen, ob eine Anweisung ausgeführt wird oder nicht. Zum Beispiel:

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

Dadurch wird geprüft, ob die Datei vorhanden ist, und die Fehlernachricht wird nur gedruckt, wenn dies nicht der Fall ist. Die or -Anweisung ist faul, was bedeutet, dass sie nicht mehr ausgeführt wird, wenn sie sicher ist, ob der Wert wahr oder falsch ist. Sobald festgestellt wird, dass der erste Begriff wahr ist, muss der Wert des anderen Begriffs nicht überprüft werden. Wenn der erste Begriff jedoch falsch ist, muss er den zweiten Begriff überprüfen.

Häufig wird ein Standardwert festgelegt:

glass = glass or 'full' # Optimist! 

Dadurch wird der Wert von glass auf 'voll' gesetzt, wenn es nicht bereits eingestellt ist. Genauer gesagt können Sie die symbolische Version von or :

glass ||= 'empty' # Pessimist. 

Es ist auch möglich, die zweite Anweisung nur auszuführen, wenn die erste Anweisung falsch ist:

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

Wiederum and ist faul, so dass sie die zweite Anweisung nur ausführt, wenn dies erforderlich ist, um einen Wert zu erhalten.

Der Operator or hat eine niedrigere Priorität als and . Ebenso || hat eine niedrigere Priorität als && . Die Symbolformen haben eine höhere Priorität als die Wortformen. Dies ist praktisch, wenn Sie wissen möchten, wann Sie diese Technik mit Zuweisung kombinieren möchten:

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

Beachten Sie, dass der Ruby Style Guide Folgendes empfiehlt :

Die Schlüsselwörter and und or sind verboten. Die minimale zusätzliche Lesbarkeit lohnt sich einfach nicht für die hohe Wahrscheinlichkeit, subtile Fehler einzuführen. Verwenden Sie für boolesche Ausdrücke immer && und || stattdessen. Verwenden Sie für die Flusskontrolle if und unless ; && und || sind auch akzeptabel, aber weniger klar.