Ruby - Operadores
Ruby suporta um rico conjunto de operadores, como você esperaria de uma linguagem moderna. A maioria dos operadores são, na verdade, chamadas de método. Por exemplo, a + b é interpretado como a. + (B), onde o método + no objeto referido pela variável a é chamado com b como seu argumento.
Para cada operador (+ - * /% ** & | ^ << >> && ||), existe uma forma correspondente de operador de atribuição abreviado (+ = - = etc.).
Operadores Aritméticos Ruby
Suponha que a variável a tenha 10 e a variável b tenha 20, então -
Operador | Descrição | Exemplo |
---|---|---|
+ | Adição - adiciona valores em ambos os lados do operador. | a + b dará 30 |
- | Subtração - subtrai o operando direito do operando esquerdo. | a - b dará -10 |
* | Multiplicação - Multiplica os valores em ambos os lados do operador. | a * b dará 200 |
/ | Divisão - Divide operando esquerdo pelo operando direito. | b / a dará 2 |
% | Módulo - Divide o operando esquerdo pelo operando direito e retorna o resto. | b% a dará 0 |
** | Expoente - Executa cálculo exponencial (potência) nos operadores. | a ** b dará 10 à potência 20 |
Operadores de comparação Ruby
Suponha que a variável a tenha 10 e a variável b tenha 20, então -
Operador | Descrição | Exemplo |
---|---|---|
== | Verifica se os valores de dois operandos são iguais ou não, se sim a condição torna-se verdadeira. | (a == b) não é verdade. |
! = | Verifica se o valor de dois operandos é igual ou não; se os valores não são iguais, a condição se torna verdadeira. | (a! = b) é verdade. |
> | Verifica se o valor do operando esquerdo é maior que o valor do operando direito, se sim, a condição torna-se verdadeira. | (a> b) não é verdade. |
< | Verifica se o valor do operando esquerdo é menor que o valor do operando direito; se sim, a condição torna-se verdadeira. | (a <b) é verdade. |
> = | Verifica se o valor do operando esquerdo é maior ou igual ao valor do operando direito, se sim a condição torna-se verdadeira. | (a> = b) não é verdade. |
<= | Verifica se o valor do operando esquerdo é menor ou igual ao valor do operando direito, se sim a condição torna-se verdadeira. | (a <= b) é verdadeiro. |
<=> | Operador de comparação combinada. Retorna 0 se o primeiro operando for igual ao segundo, 1 se o primeiro operando for maior que o segundo e -1 se o primeiro operando for menor que o segundo. | (a <=> b) retorna -1. |
=== | Usado para testar a igualdade dentro de uma cláusula when de uma instrução case . | (1 ... 10) === 5 retorna verdadeiro. |
.eql? | Verdadeiro se o receptor e o argumento tiverem o mesmo tipo e valores iguais. | 1 == 1.0 retorna verdadeiro, mas 1.eql? (1.0) é falso. |
igual? | Verdadeiro se o receptor e o argumento tiverem o mesmo id de objeto. | se aObj é duplicado de bObj então aObj == bObj é verdadeiro, a.equal? bObj é falso mas a.equal? aObj é verdadeiro. |
Operadores de atribuição Ruby
Suponha que a variável a tenha 10 e a variável b tenha 20, então -
Operador | Descrição | Exemplo |
---|---|---|
= | Operador de atribuição simples, atribui valores de operandos do lado direito ao operando do lado esquerdo. | c = a + b atribuirá o valor de a + b em c |
+ = | Adicionar operador de atribuição AND, adiciona operando direito ao operando esquerdo e atribui o resultado ao operando esquerdo. | c + = a é equivalente a c = c + a |
- = | Subtrai o operador de atribuição AND, subtrai o operando direito do operando esquerdo e atribui o resultado ao operando esquerdo. | c - = a é equivalente a c = c - a |
* = | Operador de atribuição Multiply AND, multiplica o operando direito pelo operando esquerdo e atribui o resultado ao operando esquerdo. | c * = a é equivalente a c = c * a |
/ = | Operador de atribuição Dividir AND, divide o operando esquerdo com o operando direito e atribui o resultado ao operando esquerdo. | c / = a é equivalente a c = c / a |
% = | O operador de atribuição de módulo AND pega o módulo usando dois operandos e atribui o resultado ao operando esquerdo. | c% = a é equivalente a c = c% a |
** = | O operador de atribuição de expoente AND executa cálculo exponencial (potência) nos operadores e atribui valor ao operando esquerdo. | c ** = a é equivalente a c = c ** a |
Atribuição Paralela Ruby
Ruby também suporta a atribuição paralela de variáveis. Isso permite que várias variáveis sejam inicializadas com uma única linha de código Ruby. Por exemplo -
a = 10
b = 20
c = 30
Isso pode ser declarado mais rapidamente usando atribuição paralela -
a, b, c = 10, 20, 30
A atribuição paralela também é útil para trocar os valores mantidos em duas variáveis -
a, b = b, c
Operadores Ruby Bitwise
O operador bit a bit funciona em bits e executa operação bit a bit.
Suponha que a = 60; e b = 13; agora em formato binário serão os seguintes -
a = 0011 1100
b = 0000 1101
------------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
Os seguintes operadores Bitwise são suportados pela linguagem Ruby.
Operador | Descrição | Exemplo |
---|---|---|
E | O operador binário AND copia um bit para o resultado se ele existir em ambos os operandos. | (a & b) dará 12, que é 0000 1100 |
| | O operador binário OR copia um bit se ele existir em qualquer operando. | (a | b) dará 61, que é 0011 1101 |
^ | O operador binário XOR copia o bit se estiver definido em um operando, mas não em ambos. | (a ^ b) dará 49, que é 0011 0001 |
~ | O operador de complemento binários é unário e tem o efeito de 'inverter' bits. | (~ a) resultará em -61, que é 1100 0011 na forma de complemento de 2 devido a um número binário com sinal. |
<< | Operador binário de deslocamento à esquerda. O valor dos operandos à esquerda é movido para a esquerda pelo número de bits especificado pelo operando à direita. | um << 2 dará 240, que é 1111 0000 |
>> | Operador binário de deslocamento à direita. O valor dos operandos à esquerda é movido para a direita pelo número de bits especificado pelo operando à direita. | a >> 2 dará 15, que é 0000 1111 |
Operadores lógicos Ruby
Os seguintes operadores lógicos são suportados pela linguagem Ruby
Suponha que a variável a tenha 10 e a variável b tenha 20, então -
Operador | Descrição | Exemplo |
---|---|---|
e | Operador lógico chamado AND. Se ambos os operandos forem verdadeiros, a condição se torna verdadeira. | (aeb) é verdade. |
ou | Operador lógico ou chamado. Se qualquer um dos dois operandos for diferente de zero, a condição se torna verdadeira. | (a ou b) é verdadeiro. |
&& | Operador lógico chamado AND. Se ambos os operandos forem diferentes de zero, a condição se torna verdadeira. | (a && b) é verdadeiro. |
|| | Operador lógico ou chamado. Se qualquer um dos dois operandos for diferente de zero, a condição se torna verdadeira. | (a || b) é verdade. |
! | Operador lógico chamado NOT. Use para reverter o estado lógico de seu operando. Se uma condição for verdadeira, o operador lógico NOT tornará falsa. | ! (a && b) é falso. |
não | Operador lógico chamado NOT. Use para reverter o estado lógico de seu operando. Se uma condição for verdadeira, o operador lógico NOT tornará falsa. | not (a && b) é falso. |
Operador Ternário Ruby
Existe mais um operador chamado Operador Ternário. Ele primeiro avalia uma expressão para um valor verdadeiro ou falso e, em seguida, executa uma das duas instruções fornecidas, dependendo do resultado da avaliação. O operador condicional tem esta sintaxe -
Operador | Descrição | Exemplo |
---|---|---|
? : | Expressão Condicional | Se a condição for verdadeira? Então valor X: Caso contrário, valor Y |
Operadores Ruby Range
Os intervalos de sequência em Ruby são usados para criar um intervalo de valores sucessivos - consistindo em um valor inicial, um valor final e um intervalo de valores intermediários.
Em Ruby, essas sequências são criadas usando os operadores de intervalo ".." e "...". O formato de dois pontos cria um intervalo inclusivo, enquanto o formato de três pontos cria um intervalo que exclui o valor alto especificado.
Operador | Descrição | Exemplo |
---|---|---|
.. | Cria um intervalo do ponto inicial ao ponto final, inclusive. | 1..10 Cria um intervalo de 1 a 10 inclusive. |
... | Cria um intervalo do ponto inicial ao ponto final exclusivo. | 1 ... 10 Cria um intervalo de 1 a 9. |
Ruby definido? Operadores
definiram? é um operador especial que assume a forma de uma chamada de método para determinar se a expressão passada está definida ou não. Ele retorna uma string de descrição da expressão ou nil se a expressão não estiver definida.
Existem vários 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 "." e dois-pontos duplos "::" Operadores
Você chama um método de módulo precedendo seu nome com o nome do módulo e um ponto, e faz referência a uma constante usando o nome do módulo e dois dois-pontos.
o :: é um operador unário que permite: constantes, métodos de instância e métodos de classe definidos dentro de uma classe ou módulo, para serem acessados de qualquer lugar fora da classe ou módulo.
Remember em Ruby, classes e métodos também podem ser considerados constantes.
Você precisa apenas prefixar o :: Const_name com uma expressão que retorna a classe ou objeto de módulo apropriado.
Se nenhuma expressão de prefixo for usada, a classe Object principal será usada por padrão.
Aqui estão dois exemplos -
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
Precedência de operadores Ruby
A tabela a seguir lista todos os operadores da precedência mais alta para a mais baixa.
Método | Operador | Descrição |
---|---|---|
sim | :: | Operador de resolução constante |
sim | [] [] = | Referência de elemento, conjunto de elementos |
sim | ** | Exponenciação (elevar à potência) |
sim | ! ~ + - | Não, complemento, mais e menos unários (os nomes dos métodos para os dois últimos são + @ e - @) |
sim | * /% | Multiplique, divida e modulo |
sim | + - | Adição e subtração |
sim | >> << | Deslocamento bit a bit para direita e esquerda |
sim | E | 'E' bit a bit |
sim | ^ | | "OR" exclusivo bit a bit e "OR" regular |
sim | <= <>> = | Operadores de comparação |
sim | <=> == ===! = = ~! ~ | Operadores de igualdade e correspondência de padrão (! = E! ~ Não podem ser definidos como métodos) |
&& | 'E' lógico | |
|| | 'OU' lógico | |
.. ... | Alcance (inclusivo e exclusivo) | |
? : | Ternário if-then-else | |
=% = {/ = - = + = | = & = >> = << = * = && = || = ** = | Tarefa | |
definiram? | Verifique se o símbolo especificado está definido | |
não | Negação lógica | |
ou e | Composição lógica |
NOTE- Os operadores com um Sim na coluna do método são, na verdade, métodos e, como tal, podem ser substituídos.