English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Operadores de Ruby

Ruby admite una serie de operadores ricos. La mayoría de los operadores son llamadas a métodos. Por ejemplo, a + b se interpreta como a.+(b), donde apunta a la variable a de + El método se llama, y b se utiliza como parámetro de la llamada al método.

Para cada operador (+ - * / % ** & | ^ << >> && ||), tienen un operador de asignación abreviado correspondiente (+= -= y otros).

Operadores aritméticos de Ruby

Supongamos que el valor de la variable a es 10La variable b tiene el valor de 20, entonces:

OperadorDescripciónejemplo
+Adición - Suma los operandos a ambos lados del operadora + b recibirá 30
-Resta - Restar el operando izquierdo por el operando derechoa - b recibirá -10
*Multiplicación - Multiplicar los operandos a ambos lados del operadora * b recibirá 200
/División - Dividir el operando izquierdo por el operando derechob / a recibirá 2
%Módulo - Dividir el operando izquierdo por el operando derecho, devolver el residuob % a recibirá 0
**Exponente - Ejecutar cálculo exponenciala**b recibirá 10 potencia 20

Operadores de comparación en Ruby

Supongamos que el valor de la variable a es 10La variable b tiene el valor de 20, entonces:

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

Operador de asignación en Ruby

Supongamos que el valor de la variable a es 10La variable b tiene el valor de 20, entonces:

OperadorDescripciónejemplo
=Operador de asignación simple, asigna el valor del operando derecho al operando izquierdoc = a + b asignará a a + El valor de b se asigna a c
+=Operador de asignación de adición, asigna el resultado de sumar el operando derecho al operando izquierdo al operando izquierdoc += a es equivalente a c = c + a
-=Operador de asignación de sustracción, asigna el resultado de restar el operando derecho al operando izquierdo al operando izquierdoc -= a es equivalente a c = c - a
*=Operador de asignación de multiplicación, asigna el resultado de multiplicar el operando derecho por el operando izquierdo al operando izquierdoc *= a es equivalente a c = c * a
/=Operador de asignación de división, asigna el resultado de dividir el operando izquierdo por el operando derecho al operando izquierdoc /= a es equivalente a c = c / a
%=Operador de asignación de módulo, asigna el módulo de dos operandos a la izquierdac %= a es equivalente a c = c % a
**=Operador de exponente y asignación, realiza el cálculo de exponente y asigna el resultado al operando izquierdoc **= a es equivalente a c = c ** a

Asignación paralela de Ruby

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

a = 10
b = 20
c = 30

La asignación paralela permite declarar más rápidamente:

a, b, c = 10, 20, 30

La asignación paralela es muy ú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 ejecutan las operaciones bit a bit.

Supongamos que si a = 60, y b = 13Ahora, en formato binario, se ven así:

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 soportados por Ruby.

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

Operadores lógicos de Ruby

La siguiente tabla enumera los operadores lógicos soportados por Ruby.

Supongamos que el valor de la variable a es 10La variable b tiene el valor de 20, entonces:

OperadorDescripciónejemplo
andSe llama operador lógico y. Si ambos operandos son verdaderos, la condición es verdadera.(a and b) es verdadero.
orSe llama operador lógico o. Si cualquier uno de los operandos no es cero, la condición es verdadera.(a or b) es verdadero.
&&Se llama operador lógico y. Si ambos operandos no son cero, la condición es verdadera.(a && b) es verdadero.
||Se llama operador lógico o. Si cualquier uno de los operandos no es cero, la condición es verdadera.(a || b) es verdadero.
!Operador lógico de no. Se utiliza para invertir el estado lógico del operando. Si la condición es verdadera, el operador lógico de no lo convertirá en falso.!(a && b) es falso.
notOperador lógico de no. Se utiliza para invertir el estado lógico del operando. Si la condición es verdadera, el operador lógico de no lo convertirá en falso.not(a && b) es falso.

operador ternario en Ruby

Tener más de una operación se llama operador ternario. La primera calcula el valor verdadero o falso de la expresión, y luego según este resultado decide ejecutar una de las dos siguientes sentencias. 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 en Ruby

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

En Ruby, estas secuencias se crean utilizando los operadores de rango ".." y "...". El rango en forma de puntos duros incluye tanto el valor de inicio como el valor de final, mientras que el rango en forma de puntos medios solo incluye el valor de inicio y no incluye el valor de final.

OperadorDescripciónejemplo
..Crear un rango desde el punto de inicio hasta el punto de final (incluyendo el punto de final)1..10 Crear desde 1 a 10 de
...Crear un rango desde el punto de inicio hasta el punto de final (sin incluir el punto de final)1...10 Crear desde 1 a 9 de

operador defined? en Ruby

defined? es un operador especial que, en forma de llamada a método, determina si una expresión ha sido definida. Devuelve la cadena de descripción de la expresión, y si la expresión no está definida, devuelve nil.

Aquí hay varios usos del operador defined?

usos 1

definido? variable # Si variable ya ha sido inicializada, es True

por ejemplo:

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

usos 2

definido? method_call # Si el método ya está definido, es True

por ejemplo:

definido? puts # => "método"
definido? puts(bar) # => nil (aquí bar no está definido)
definido? unpack # => nil (aquí no está definido)

usos 3

# Si existe un método que puede ser llamado por super, es True
definido? super

por ejemplo:

definido? super # => "super" (si puede ser llamado)
definido? super # => nil (si no puede ser llamado)

usos 4

definido? yield # Si se ha pasado un bloque de código, es True

por ejemplo:

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

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

Puedes llamar métodos dentro de una clase o módulo utilizando el nombre de la clase o módulo y .; puedes referirte a constantes dentro de una clase o módulo utilizando el nombre de la clase o módulo y ::.

:: es un operador unario, que permite definir constantes, ejemplos de métodos y métodos de clase dentro de una clase o módulo, y puede ser accedido desde cualquier lugar fuera de la clase o módulo.

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

Sólo tienes que añadir el nombre del constante antes de la expresión. :: Un prefijo, se puede devolver el objeto de clase o módulo apropiado.

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

Aquí hay dos ejemplos:

MR_COUNT = 0 # Definido en la clase principal Object
module Foo
  MR_COUNT = 0
  ::MR_COUNT = 1    # Establecer el recuento global 1
  MR_COUNT = 2      # Establecer el recuento local 2
end
puts MR_COUNT # Esto es la constante global
puts Foo::MR_COUNT # Esto 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

Prioridad de operadores de Ruby

La siguiente tabla enumera todos los operadores en orden de prioridad desde la más alta a la más baja.

MétodoOperadorDescripción
es::Operador de análisis constante
es[ ] [ ]=Referencia de elemento, conjunto de elementos
es**Exponente
es! ~ + -Negación, complemento, adición y sustracción unaria (los nombres de los métodos de los últimos dos son +@ y -@)
es* / %Multiplicación, división y módulo
es+ -Adición y sustracción
es>> <<Desplazamiento a la derecha y a la izquierda de bits
es&AND bit
es^ |XOR y OR bit
es<= < > >=Operadores de comparación
es<=> == === != =~ !~Operadores de comparación y coincidencia de patrones (no se pueden definir como métodos != y !~)

&&Y lógico

||O lógico

.. ...Rango (inclusivo, no inclusivo)

? :if ternario-then-else

= %= { /= -= += |= &= >>= <<= *= &&= ||= **=Asignación

defined?Verificar si el símbolo especificado está definido

notNegación lógica

or andComposición lógica

Nota:Se identifica en la lista de métodos como es Los operadores son métodos, por lo tanto, pueden ser sobrecargados.