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 Sí en la columna de método son en realidad métodos y, como tales, pueden anularse.