Looking for ruby Keywords? Try Ask4Keywords

Ruby Language Flujo de control con sentencias lógicas.


Ejemplo

Si bien puede parecer contrario a la intuición, puede usar operadores lógicos para determinar si se ejecuta una declaración. Por ejemplo:

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

Esto verificará si el archivo existe y solo imprimirá el mensaje de error si no existe. La declaración or es perezosa, lo que significa que dejará de ejecutarse una vez que esté seguro de si el valor es verdadero o falso. Tan pronto como se determina que el primer término es verdadero, no hay necesidad de verificar el valor del otro término. Pero si el primer término es falso, debe verificar el segundo término.

Un uso común es establecer un valor predeterminado:

glass = glass or 'full' # Optimist! 

Eso establece el valor del glass en 'lleno' si aún no está configurado. Más concisamente, puede utilizar la versión simbólica de or :

glass ||= 'empty' # Pessimist. 

También es posible ejecutar la segunda instrucción solo si la primera es falsa:

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

De nuevo, and es perezoso, por lo que solo ejecutará la segunda instrucción si es necesario para llegar a un valor.

El operador or tiene menor prioridad que and . Del mismo modo, || tiene menor precedencia que && . Las formas de los símbolos tienen mayor prioridad que las formas de las palabras. Esto es útil para saber cuándo desea mezclar esta técnica con la asignación:

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

Tenga en cuenta que la Guía de estilo Ruby recomienda :

El and y or palabras clave están prohibidos. La legibilidad añadida mínima no vale la pena por la alta probabilidad de introducir errores sutiles. Para expresiones booleanas, use siempre && y || en lugar. Para control de flujo, use if y a unless ; && y || También son aceptables pero menos claras.