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:
| Operador | Descripción | Ejemplo |
|---|---|---|
| + | 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:
| Operador | Descripción | Ejemplo |
|---|---|---|
| == | 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:
| Operador | Descripción | Ejemplo |
|---|---|---|
| = | 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:
Con la asignación paralela se puede declarar más rápido:
La asignación paralela también es útil para intercambiar los valores de dos variables:
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.
| Operador | Descripción | Ejemplo |
|---|---|---|
| & | 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:
| Operador | Descripción | Ejemplo |
|---|---|---|
| and | Se denomina operador Y (AND) lógico. Si ambos operandos son verdaderos, la condición es verdadera. | (a and b) es verdadero. |
| or | Se 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. |
| not | 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. | 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:
| Operador | Descripción | Ejemplo |
|---|---|---|
| ? : | Expresión condicional | Si 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.
| Operador | Descripción | Ejemplo |
|---|---|---|
| .. | 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
Por ejemplo:
Uso 2
Por ejemplo:
Uso 3
Por ejemplo:
Uso 4
Por ejemplo:
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:
Segundo ejemplo:
Precedencia de operadores de Ruby
La siguiente tabla enumera todos los operadores según su precedencia, de mayor a menor.
| Método | Operador | Descripció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