Ruby Operadores

Ruby admite un rico conjunto de operadores. La mayoría de los operadores son en realidad llamadas a métodos. Por ejemplo, a + b se interpreta como a.+(b), donde se invoca el método + apuntando a la variable a, con b como argumento de la llamada al método.

Para cada operador (+ - * / % ** & | ^ << >> && ||), existe un operador de asignación abreviado correspondiente (+= -= etcétera).

Operadores aritméticos de Ruby

Supongamos que la variable a tiene el valor 10 y la variable b tiene el valor 20, entonces:

OperadorDescripciónEjemplo
+Suma: suma los operandos a ambos lados del operador.a + b dará 30
-Resta: resta el operando derecho del operando izquierdo.a - b dará -10
*Multiplicación: multiplica los operandos a ambos lados del operador.a * b dará 200
/División: divide el operando izquierdo entre el operando derecho.b / a dará 2
%Módulo: divide el operando izquierdo entre el operando derecho y devuelve el resto.b % a dará 0
**Exponente: realiza el cálculo exponencial.a**b dará 10 elevado a la 20

Operadores de comparación de Ruby

Supongamos que la variable a tiene el valor 10 y la variable b tiene el valor 20, entonces:

OperadorDescripciónEjemplo
==Comprueba si los valores de dos operandos son iguales; si son iguales, la condición es verdadera.(a == b) no es verdadero.
!=Comprueba si los valores de dos operandos son iguales; si no son iguales, la condición es verdadera.(a != b) es verdadero.
>Comprueba si el valor del operando izquierdo es mayor que el valor del operando derecho; si es así, la condición es verdadera.(a > b) no es verdadero.
<Comprueba si el valor del operando izquierdo es menor que el valor del operando derecho; si es así, la condición es verdadera.(a < b) es verdadero.
>=Comprueba si el valor del operando izquierdo es mayor o igual que el valor del operando derecho; si es así, la condición es verdadera.(a >= b) no es verdadero.
<=Comprueba si el valor del operando izquierdo es menor o igual que el valor del operando derecho; si es así, la condición es verdadera.(a <= b) es verdadero.
<=>Operador de comparación combinada. Devuelve 0 si el primer operando es igual al segundo, 1 si el primer operando es mayor que el segundo y -1 si el primer operando es menor que el segundo.(a <=> b) devuelve -1.
===Se utiliza para probarcasela igualdad dentro de la cláusula when de la sentencia case.(1...10) === 5 devuelve true.
.eql?Devuelve true si el receptor y el argumento tienen el mismo tipo y valores iguales.1 == 1.0 devuelve true, pero 1.eql?(1.0) devuelve false.
equal?Devuelve true si el receptor y el argumento tienen el mismo id de objeto.Si aObj es una copia de bObj, entonces aObj == bObj devuelve true, a.equal?bObj devuelve false, pero a.equal?aObj devuelve true.

Operadores de asignación de Ruby

Supongamos que la variable a tiene el valor 10 y la variable b tiene el valor 20, entonces:

OperadorDescripciónEjemplo
=Operador de asignación simple: asigna el valor del operando derecho al operando izquierdo.c = a + b asignará el valor de a + b a c
+=Operador de suma y asignación: asigna al operando izquierdo el resultado de sumar el operando derecho al operando izquierdo.c += a equivale a c = c + a
-=Operador de resta y asignación: asigna al operando izquierdo el resultado de restar el operando derecho del operando izquierdo.c -= a equivale a c = c - a
*=Operador de multiplicación y asignación: asigna al operando izquierdo el resultado de multiplicar el operando derecho por el operando izquierdo.c *= a equivale a c = c * a
/=Operador de división y asignación: asigna al operando izquierdo el resultado de dividir el operando izquierdo entre el operando derecho.c /= a equivale a c = c / a
%=Operador de módulo y asignación: asigna al operando izquierdo el módulo de los dos operandos.c %= a equivale a c = c % a
**=Operador de exponente y asignación: realiza el cálculo exponencial y asigna el resultado al operando izquierdo.c **= a equivale a c = c ** a

Asignación paralela en Ruby

Ruby también admite la asignación paralela de variables. Esto permite que múltiples variables se inicialicen con una sola línea de código Ruby. Por ejemplo:

a = 10 b = 20 c = 30

Con la asignación paralela se puede declarar más rápido:

a, b, c = 10, 20, 30

La asignación paralela también es útil para intercambiar los valores de dos variables:

a, b = b, c

Operadores de bits de Ruby

Los operadores de bits actúan sobre los bits y realizan las operaciones bit a bit.

Supongamos que a = 60 y b = 13; ahora, en formato binario, se representan de la siguiente manera:

a = 0011 1100

b = 0000 1101

-----------------

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a  = 1100 0011

La siguiente tabla enumera los operadores de bits compatibles con Ruby.

OperadorDescripciónEjemplo
&Si está presente en ambos operandos, el operador AND binario copia un bit al resultado.(a & b) dará 12, es decir, 0000 1100
|Si está presente en cualquiera de los operandos, el operador OR binario copia un bit al resultado.(a | b) dará 61, es decir, 0011 1101
^Si está presente en uno de los operandos pero no en ambos, el operador XOR binario copia un bit al resultado.(a ^ b) dará 49, es decir, 0011 0001
~El operador de complemento a dos es un operador unario que tiene el efecto de "voltear" los bits, es decir, 0 se convierte en 1 y 1 se convierte en 0.(~a ) dará -61, es decir, 1100 0011, que es la forma de complemento de un número binario con signo.
<<Operador de desplazamiento a la izquierda binario. El valor del operando izquierdo se desplaza a la izquierda el número de bits especificado por el operando derecho.a << 2 dará 240, es decir, 1111 0000
>>Operador de desplazamiento a la derecha binario. El valor del operando izquierdo se desplaza a la derecha el número de bits especificado por el operando derecho.a >> 2 dará 15, es decir, 0000 1111

Operadores lógicos de Ruby

La siguiente tabla enumera los operadores lógicos compatibles con Ruby.

Supongamos que la variable a tiene el valor 10 y la variable b tiene el valor 20, entonces:

OperadorDescripciónEjemplo
andSe denomina operador Y (AND) lógico. Si ambos operandos son verdaderos, la condición es verdadera.(a and b) es verdadero.
orSe denomina operador O (OR) lógico. Si cualquiera de los dos operandos es distinto de cero, la condición es verdadera.(a or b) es verdadero.
&&Se denomina operador Y (AND) lógico. Si ambos operandos son distintos de cero, la condición es verdadera.(a && b) es verdadero.
||Se denomina operador O (OR) lógico. Si cualquiera de los dos operandos es distinto de cero, la condición es verdadera.(a || b) es verdadero.
!Se denomina operador de negación lógica. Se usa para invertir el estado lógico del operando. Si la condición es verdadera, el operador de negación lógica la convertirá en falsa.!(a && b) es falso.
notSe denomina operador de negación lógica. Se usa para invertir el estado lógico del operando. Si la condición es verdadera, el operador de negación lógica la convertirá en falsa.not(a && b) es falso.

Operador ternario de Ruby

Hay una operación con más de un operando llamada operador ternario. Primero se evalúa el valor de verdad de la expresión y, según este resultado, decide ejecutar una de las dos sentencias siguientes. La sintaxis del operador condicional es la siguiente:

OperadorDescripciónEjemplo
? :Expresión condicionalSi la condición es verdadera ? entonces el valor es X : de lo contrario el valor es Y

Operadores de rango de Ruby

En Ruby, los rangos de secuencia se utilizan para crear una serie de valores consecutivos: incluyen el valor inicial, el valor final (según el caso) y los valores entre ellos.

En Ruby, estas secuencias se crean utilizando los operadores de rango ".." y "...". La forma de dos puntos crea un rango que incluye el valor inicial y el valor final; la forma de tres puntos crea un rango que solo incluye el valor inicial y no incluye el valor final.

OperadorDescripciónEjemplo
..Crea un rango desde el punto inicial hasta el punto final (incluye el punto final)1..10 crea un rango de 1 a 10
...Crea un rango desde el punto inicial hasta el punto final (no incluye el punto final)1...10 crea un rango de 1 a 9

El operador defined? de Ruby

defined? es un operador especial que, en forma de llamada a método, determina si la expresión pasada está definida. Devuelve una cadena descriptiva de la expresión; si la expresión no está definida, devuelvenil。

A continuación se muestran los diversos usos del operador defined?:

Uso 1

defined? variable #Verdadero si la variable ya ha sido inicializada

Por ejemplo:

foo = 42 defined? foo # => "local-variable" defined? $_ # => "global-variable" defined? bar #=> nil (no definido)

Uso 2

defined? method_call #Verdadero si el método ya está definido

Por ejemplo:

defined? puts # => "method" defined? puts(bar) #=> nil (aquí bar no está definido) defined? unpack #=> nil (aquí no está definido)

Uso 3

#Verdadero si existe un método que pueda ser invocado por super defined? super

Por ejemplo:

defined? super #=> "super" (si puede ser invocado) defined? super #=> nil (si no puede ser invocado)

Uso 4

defined? yield #Verdadero si se ha pasado un bloque de código

Por ejemplo:

defined? yield #=> "yield" (si se ha pasado un bloque) defined? yield #=> nil (si no se ha pasado un bloque)

El operador punto "." y el operador de doble dos puntos "::" de Ruby

Puedes anteponer al nombre del método el nombre de la clase o módulo y.un punto para llamar a los métodos de la clase o módulo. Puedes usar el nombre de la clase o módulo y dos dos puntos::para referenciar constantes en la clase o módulo.

::Es un operador unario que permite definir constantes, métodos de instancia y métodos de clase dentro de una clase o módulo, y que es accesible desde cualquier lugar fuera de la clase o módulo.

Recuerda:En Ruby, las clases y los métodos también pueden ser tratados como constantes.

Solo necesitas anteponer al nombre de la constante en la expresión::el prefijo para devolver el objeto de clase o módulo adecuado.

Si::la expresión anterior es un nombre de clase o módulo, devuelve el valor de la constante correspondiente dentro de esa clase o módulo; si::no hay una expresión de prefijo antes, devuelve el valor de la constante correspondiente en la clase Object principal.

A continuación se muestran dos ejemplos:

MR_COUNT = 0 #Constantes definidas en la clase Object principal module Foo MR_COUNT = 0 ::MR_COUNT = 1 #Establecer el contador global a 1 MR_COUNT = 2 #Establecer el contador local a 2 end puts MR_COUNT #Esta es la constante global puts Foo::MR_COUNT #Esta es la constante local de "Foo"

Segundo ejemplo:

CONST = ' out there' class Inside_one CONST = proc {' in there'} def where_is_my_CONST ::CONST + ' inside one' end end class Inside_two CONST = ' inside two' def where_is_my_CONST CONST end end puts Inside_one.new.where_is_my_CONST puts Inside_two.new.where_is_my_CONST puts Object::CONST + Inside_two::CONST puts Inside_two::CONST + CONST puts Inside_one::CONST puts Inside_one::CONST.call + Inside_two::CONST

Precedencia de operadores de Ruby

La siguiente tabla enumera todos los operadores según su precedencia, de mayor a menor.

MétodoOperadorDescripción
Sí :: Operador de resolución de constantes
Sí [ ] [ ]= Referencia a elemento, asignación de elemento
Sí ** Exponenciación
Sí ! ~ + - Negación, complemento, más unario, menos unario (los dos últimos tienen nombres de método +@ y -@)
Sí * / % Multiplicación, división, módulo
Sí + - Suma y resta
Sí >> << Desplazamiento de bits a la derecha, desplazamiento de bits a la izquierda
Sí & AND a nivel de bits
Sí ^ | XOR a nivel de bits, OR a nivel de bits
Sí <= < > >= Operadores de comparación
Sí <=> == === != =~ !~ Operadores de igualdad y coincidencia de patrones (!= y !~ no se pueden definir como métodos)
&& Y lógico
|| O lógico
.. ... Rango (inclusivo, exclusivo)
? : Ternario if-then-else
= %= { /= -= += |= &= >>= <<= *= &&= ||= **= Asignación
defined? Comprueba si el símbolo especificado está definido
not Negación lógica
or and Composición lógica

Nota:En la columna de métodos, los operadores marcadosSíson en realidad métodos, por lo que pueden sobrecargarse.

Otras extensiones