Diferencia entre OR y operador de tubería doble en Ruby

Nurudeen Ibrahim 18 abril 2022
Diferencia entre OR y operador de tubería doble en Ruby

La or y || son ambos operadores lógicos en Ruby; pueden ser confusos debido a su comportamiento similar. Solo hay una ligera diferencia entre ellos, y en este tutorial veremos en qué se diferencian y cómo se debe usar cada uno.

Una cosa importante para recordar es que se comportan de la misma manera si aparecen en una expresión que no contiene ningún otro operador. De lo contrario, se comportan de manera diferente.

Cuando no hay otro operador involucrado

En esta clasificación, los dos operadores se comportan de la misma manera, devolviendo el primer valor verdadero.

Código de ejemplo:

nil or 5
2 or 4

Producción :

5
2

Código de ejemplo:

nil || 5
2 || 4

Producción :

5
2

Tenga en cuenta que en los ejemplos anteriores, los códigos tienen la forma de expresión y no de declaración. Combinar cualquier cosa que lo convierta en una declaración produciría un resultado inesperado.

Por ejemplo, nil or 5 es una expresión que se puede pasar, tal vez como un argumento a un método o asignada a una variable, mientras que puts nil or 5 es una declaración completa por sí sola.

La mejor manera de probar las expresiones de Ruby es usando el Ruby interactivo IRB. Viene preinstalado en macOS. Para probar con IRB, siga los pasos a continuación.

  • Abrir una terminal
  • Escribe irb y pulsa Enter. Esto mostrará un mensaje.
  • Escriba su expresión, por ejemplo, nil || 5, y pulsa Enter
  • El resultado de la expresión se mostrará en la siguiente línea

Cuando algunos otros operadores están involucrados

Nuestro enfoque está en el valor de a después de evaluar el código en los ejemplos a continuación.

Código de ejemplo:

a = nil or 5
b = 2 or 4
puts a
puts b

Producción :

nil
2

Código de ejemplo:

a = nil || 5
b = 2 || 4
puts a
puts b

Producción :

5
2

La mejor forma de explicar el comportamiento anterior es observar los operadores de Ruby tabla de precedencia. Cada vez que una expresión se compone de múltiples operadores, como en los ejemplos anteriores, debemos evaluarlos en función de su precedencia.

La tabla muestra que el operador = tiene mayor precedencia que el operador or pero es menor que el || operador. Por lo tanto, el orden de evaluación en los ejemplos se puede desglosar como se muestra a continuación.

(a = nil) or 5
(b = 2) or 4
a = (nil || 5)
b = (2 || 4)

Aunque decidimos usar el operador = en los ejemplos anteriores, podemos usar cualquier operador mayor que or pero menor que || y obtener el mismo comportamiento; un ejemplo es +=.

Código de ejemplo:

a = 1
a += 2 || 4    # a += (2 || 4)
puts a

Producción :

3

Código de ejemplo:

a = 1
a += 2 or 4      # (a += 2) or 4
puts a

Producción :

3

Código de ejemplo:

a = 1
a += nil || 5      # a += (nil || 5)
puts a

Producción :

6

Código de ejemplo:

a = 1
a += nil or 5      # (a += nil) or 5

Lanzará un TypeError (nil can't be coerced into Integer) porque Ruby intenta evaluar primero la expresión entre paréntesis, incrementando a por nil.

Artículo relacionado - Ruby Operator