Looking for ruby Keywords? Try Ask4Keywords

Ruby Language Controllo del flusso con istruzioni logiche


Esempio

Anche se può sembrare controintuitivo, è possibile utilizzare gli operatori logici per determinare se viene eseguita o meno un'istruzione. Per esempio:

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

Questo controllerà se il file esiste e stamperà il messaggio di errore solo se non lo è. L'istruzione or è pigro, il che significa che smetterà di essere eseguito una volta che è sicuro se il suo valore sia vero o falso. Non appena viene scoperto che il primo termine è vero, non è necessario verificare il valore dell'altro termine. Ma se il primo termine è falso, deve controllare il secondo termine.

Un uso comune è impostare un valore predefinito:

glass = glass or 'full' # Optimist! 

Questo imposta il valore del glass su "pieno" se non è già impostato. Più concisamente, è possibile utilizzare la versione simbolica di or :

glass ||= 'empty' # Pessimist. 

È anche possibile eseguire la seconda istruzione solo se la prima è falsa:

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

Di nuovo, and è pigro, quindi eseguirà la seconda istruzione solo se necessario per arrivare a un valore.

L'operatore or ha una precedenza inferiore rispetto a and . Allo stesso modo, || ha precedenza più bassa di && . Le forme simbolo hanno una precedenza superiore rispetto alle forme di parole. Questo è utile sapere quando si desidera mescolare questa tecnica con l'assegnazione:

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

Si noti che la Guida allo stile di Ruby consiglia :

E and or parole chiave sono bannati. La minima leggibilità aggiunta non merita l'alta probabilità di introdurre bug sottili. Per le espressioni booleane, usa sempre && e || anziché. Per il controllo del flusso, utilizzare if e a unless ; && e || sono anche accettabili ma meno chiari.