Ruby - Operadores

Ruby admite un amplio conjunto de operadores, como cabría esperar de un lenguaje moderno. La mayoría de los operadores son en realidad llamadas a métodos. Por ejemplo, a + b se interpreta como a. + (B), donde el método + en el objeto al que se refiere la variable a se llama con b como argumento.

Para cada operador (+ - * /% ** & | ^ << >> && ||), hay una forma correspondiente de operador de asignación abreviado (+ = - = etc.).

Operadores aritméticos de Ruby

Suponga que la variable a tiene 10 y la variable b tiene 20, entonces -

Operador Descripción Ejemplo
+ Adición: agrega valores a ambos lados del operador. a + b dará 30
- Resta: resta el operando de la mano derecha del operando de la mano izquierda. a - b dará -10
* Multiplicación: multiplica los valores a ambos lados del operador. a * b dará 200
/ División: divide el operando de la izquierda entre el operando de la derecha. b / a dará 2
% Módulo: divide el operando de la izquierda entre el operando de la derecha y devuelve el resto. b% a dará 0
** Exponente: realiza cálculos exponenciales (potencia) en los operadores. a ** b dará 10 elevado a 20

Operadores de comparación de Ruby

Suponga que la variable a tiene 10 y la variable b tiene 20, entonces -

Operador Descripción Ejemplo
== Comprueba si el valor de dos operandos es igual o no, si es así, la condición se convierte en verdadera. (a == b) no es cierto.
! = Comprueba si el valor de dos operandos es igual o no, si los valores no son iguales, la condición se convierte en verdadera. (a! = b) es cierto.
> Comprueba si el valor del operando izquierdo es mayor que el valor del operando derecho, si es así, la condición se convierte en verdadera. (a> b) no es cierto.
< Comprueba si el valor del operando izquierdo es menor que el valor del operando derecho, si es así, la condición se convierte en verdadera. (a <b) es cierto.
> = Comprueba si el valor del operando izquierdo es mayor o igual que el valor del operando derecho, si es así, la condición se convierte en verdadera. (a> = b) no es cierto.
<= Comprueba si el valor del operando izquierdo es menor o igual que el valor del operando derecho, si es así, la condición se convierte en verdadera. (a <= b) es cierto.
<=> Operador de comparación combinado. 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 usa para probar la igualdad dentro de una cláusula when de una declaración de caso . (1 ... 10) === 5 devuelve verdadero.
.eql? Verdadero si el receptor y el argumento tienen el mismo tipo y valores iguales. 1 == 1.0 devuelve verdadero, pero 1.eql? (1.0) es falso.
¿igual? Verdadero si el receptor y el argumento tienen el mismo ID de objeto. si aObj es un duplicado de bObj entonces aObj == bObj es verdadero, a.equal? ​​bObj es falso pero a.equal? ​​aObj es verdadero.

Operadores de asignación de Ruby

Suponga que la variable a tiene 10 y la variable b tiene 20, entonces -

Operador Descripción Ejemplo
= Operador de asignación simple, asigna valores de los operandos del lado derecho al operando del lado izquierdo. c = a + b asignará el valor de a + b en c
+ = Agregar operador de asignación Y, agrega el operando derecho al operando izquierdo y asigna el resultado al operando izquierdo. c + = a es equivalente ac = c + a
- = Restar operador de asignación AND, resta el operando derecho del operando izquierdo y asigna el resultado al operando izquierdo. c - = a es equivalente ac = c - a
* = Multiplica el operador de asignación AND, multiplica el operando derecho por el izquierdo y asigna el resultado al operando izquierdo. c * = a es equivalente ac = c * a
/ = Operador de asignación Dividir AND, divide el operando izquierdo con el operando derecho y asigna el resultado al operando izquierdo. c / = a es equivalente ac = c / a
% = Operador de asignación de módulo AND, toma el módulo usando dos operandos y asigna el resultado al operando izquierdo. c% = a es equivalente ac = c% a
** = Operador de asignación Y de exponente, realiza cálculos exponenciales (potencia) en los operadores y asigna valor al operando izquierdo. c ** = a es equivalente ac = c ** a

Asignación paralela de Ruby

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

a = 10
b = 20
c = 30

Esto se puede declarar más rápidamente utilizando una asignación en paralelo:

a, b, c = 10, 20, 30

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

a, b = b, c

Operadores Ruby Bitwise

El operador bit a bit trabaja en bits y realiza operaciones bit a bit.

Suponga si a = 60; y b = 13; ahora en formato binario serán los siguientes:

a    =  0011 1100
 b    =  0000 1101
 ------------------
 a&b  =  0000 1100
 a|b  =  0011 1101
 a^b  =  0011 0001
 ~a   =  1100 0011

Los siguientes operadores Bitwise son compatibles con el lenguaje Ruby.

Operador Descripción Ejemplo
Y El operador AND binario copia un bit al resultado si existe en ambos operandos. (a & b) dará 12, que es 0000 1100
| El operador OR binario copia un bit si existe en cualquiera de los operandos. (a | b) dará 61, que es 0011 1101
^ El operador binario XOR copia el bit si está configurado en un operando pero no en ambos. (a ^ b) dará 49, que es 0011 0001
~ El operador de complemento binario es unario y tiene el efecto de "voltear" bits. (~ a) dará -61, que es 1100 0011 en forma de complemento a 2 debido a un número binario con signo.
<< Operador binario de desplazamiento a la izquierda. El valor de los operandos de la izquierda se mueve a la izquierda el número de bits especificado por el operando de la derecha. un << 2 dará 240, que es 1111 0000
>> Operador de cambio a la derecha binario. El valor de los operandos de la izquierda se mueve hacia la derecha el número de bits especificado por el operando de la derecha. a >> 2 dará 15, que es 0000 1111

Operadores lógicos de Ruby

Los siguientes operadores lógicos son compatibles con el lenguaje Ruby

Suponga que la variable a tiene 10 y la variable b tiene 20, entonces -

Operador Descripción Ejemplo
y Operador llamado lógico AND. Si ambos operandos son verdaderos, entonces la condición se vuelve verdadera. (ayb) es cierto.
o Operador OR lógico llamado. Si alguno de los dos operandos es distinto de cero, la condición se cumple. (a o b) es cierto.
&& Operador llamado lógico AND. Si ambos operandos son distintos de cero, la condición se cumple. (a && b) es cierto.
|| Operador OR lógico llamado. Si alguno de los dos operandos es distinto de cero, la condición se cumple. (a || b) es cierto.
! Operador llamado lógico NOT. Use para revertir el estado lógico de su operando. Si una condición es verdadera, entonces el operador lógico NOT hará que sea falsa. ! (a && b) es falso.
no Operador llamado lógico NOT. Use para revertir el estado lógico de su operando. Si una condición es verdadera, entonces el operador lógico NOT hará que sea falsa. no (a && b) es falso.

Operador ternario rubí

Hay un operador más llamado Operador Ternario. Primero evalúa una expresión para un valor verdadero o falso y luego ejecuta una de las dos declaraciones dadas dependiendo del resultado de la evaluación. El operador condicional tiene esta sintaxis:

Operador Descripción Ejemplo
? : Expresión condicional ¿Si la condición es verdadera? Entonces valor X: De lo contrario valor Y

Operadores de la gama Ruby

Los rangos de secuencia en Ruby se utilizan para crear un rango de valores sucesivos, que consta de un valor inicial, un valor final y un rango de valores intermedios.

En Ruby, estas secuencias se crean usando los operadores de rango ".." y "...". La forma de dos puntos crea un rango inclusivo, mientras que la forma de tres puntos crea un rango que excluye el valor alto especificado.

Operador Descripción Ejemplo
.. Crea un rango desde el punto de inicio hasta el punto final inclusive. 1..10 Crea un rango de 1 a 10 inclusive.
... Crea un rango desde el punto de inicio hasta el punto final exclusivo. 1 ... 10 Crea un rango de 1 a 9.

¿Ruby definido? Operadores

definido? es un operador especial que toma la forma de una llamada a un método para determinar si la expresión pasada está definida o no. Devuelve una cadena de descripción de la expresión, o nil si la expresión no está definida.

¿Hay varios usos de definido? Operador

Uso 1

defined? variable # True if variable is initialized

For Example

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

Uso 2

defined? method_call # True if a method is defined

For Example

defined? puts        # => "method"
defined? puts(bar)   # => nil (bar is not defined here)
defined? unpack      # => nil (not defined here)

Uso 3

# True if a method exists that can be called with super user
defined? super

For Example

defined? super     # => "super" (if it can be called)
defined? super     # => nil (if it cannot be)

Uso 4

defined? yield   # True if a code block has been passed

For Example

defined? yield    # => "yield" (if there is a block passed)
defined? yield    # => nil (if there is no block)

Ruby Dot "." y Operadores de Doble Colon "::"

Llamas a un método de módulo precediendo su nombre con el nombre del módulo y un punto, y haces referencia a una constante usando el nombre del módulo y dos dos puntos.

los :: es un operador unario que permite: a las constantes, métodos de instancia y métodos de clase definidos dentro de una clase o módulo, acceder desde cualquier lugar fuera de la clase o módulo.

Remember en Ruby, las clases y los métodos también pueden considerarse constantes.

Solo necesita prefijar el :: Const_name con una expresión que devuelve la clase apropiada o el objeto de módulo.

Si no se usa una expresión de prefijo, la clase de objeto principal se usa por defecto.

Aquí hay dos ejemplos:

MR_COUNT = 0         # constant defined on main Object class
module Foo
   MR_COUNT = 0
   ::MR_COUNT = 1    # set global count to 1
   MR_COUNT = 2      # set local count to 2
end
puts MR_COUNT        # this is the global constant
puts Foo::MR_COUNT   # this is the local "Foo" constant

Second Example

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 Ruby

La siguiente tabla enumera todos los operadores de mayor a menor precedencia.

Método Operador Descripción
si :: Operador de resolución constante
si [] [] = Referencia de elemento, conjunto de elementos
si ** Exponenciación (subir al poder)
si ! ~ + - No, complemento, unario más y menos (los nombres de método para los dos últimos son + @ y - @)
si * /% Multiplica, divide y modulo
si + - Adición y sustracción
si >> << Desplazamiento bit a bit a derecha e izquierda
si Y Bit a bit 'Y'
si ^ | "OR" exclusivo bit a bit y "OR" regular
si <= <>> = Operadores de comparación
si <=> == ===! = = ~! ~ Operadores de igualdad y coincidencia de patrones (! = Y! ~ Pueden no definirse como métodos)
  && 'Y' lógico
  || 'OR' lógico
  .. ... Rango (inclusivo y exclusivo)
  ? : Ternario si-entonces-si no
  =% = {/ = - = + = | = & = >> = << = * = && = || = ** = Asignación
  definido? Compruebe si el símbolo especificado está definido
  no Negación lógica
  o y Composición lógica

NOTE- Los operadores con un en la columna de método son en realidad métodos y, como tales, pueden anularse.