Ruby - Operatori
Ruby supporta un ricco set di operatori, come ci si aspetterebbe da un linguaggio moderno. La maggior parte degli operatori sono in realtà chiamate a metodi. Ad esempio, a + b viene interpretato come a. + (B), dove il metodo + nell'oggetto a cui fa riferimento la variabile a viene chiamato con b come argomento.
Per ogni operatore (+ - * /% ** & | ^ << >> && ||), esiste una forma corrispondente di operatore di assegnazione abbreviata (+ = - = ecc.).
Operatori aritmetici di Ruby
Supponiamo che la variabile a contenga 10 e la variabile b ne contenga 20, quindi -
| Operatore | Descrizione | Esempio |
|---|---|---|
| + | Addizione: aggiunge valori su entrambi i lati dell'operatore. | a + b darà 30 |
| - | Sottrazione: sottrae l'operando di destra dall'operando di sinistra. | a - b darà -10 |
| * | Moltiplicazione: moltiplica i valori su entrambi i lati dell'operatore. | a * b darà 200 |
| / | Divisione: divide l'operando di sinistra per l'operando di destra. | b / a darà 2 |
| % | Modulo: divide l'operando sinistro per l'operando destro e restituisce il resto. | b% a darà 0 |
| ** | Esponente: esegue il calcolo esponenziale (potenza) sugli operatori. | a ** b darà 10 alla potenza 20 |
Operatori di confronto di Ruby
Supponiamo che la variabile a contenga 10 e la variabile b ne contenga 20, quindi -
| Operatore | Descrizione | Esempio |
|---|---|---|
| == | Controlla se il valore di due operandi è uguale o meno, in caso affermativo la condizione diventa vera. | (a == b) non è vero. |
| ! = | Controlla se il valore di due operandi è uguale o meno, se i valori non sono uguali la condizione diventa vera. | (a! = b) è vero. |
| > | Controlla se il valore dell'operando sinistro è maggiore del valore dell'operando destro, in caso affermativo la condizione diventa vera. | (a> b) non è vero. |
| < | Controlla se il valore dell'operando sinistro è inferiore al valore dell'operando destro, in caso affermativo la condizione diventa vera. | (a <b) è vero. |
| > = | Controlla se il valore dell'operando sinistro è maggiore o uguale al valore dell'operando destro, in caso affermativo la condizione diventa vera. | (a> = b) non è vero. |
| <= | Controlla se il valore dell'operando sinistro è minore o uguale al valore dell'operando destro, in caso affermativo la condizione diventa vera. | (a <= b) è vero. |
| <=> | Operatore di confronto combinato. Restituisce 0 se il primo operando è uguale al secondo, 1 se il primo operando è maggiore del secondo e -1 se il primo operando è minore del secondo. | (a <=> b) restituisce -1. |
| === | Utilizzato per testare l'uguaglianza all'interno di una clausola when di un'istruzione case . | (1 ... 10) === 5 restituisce true. |
| .eql? | Vero se il destinatario e l'argomento hanno lo stesso tipo e valori uguali. | 1 == 1.0 restituisce vero, ma 1.eql? (1.0) è falso. |
| pari? | Vero se il destinatario e l'argomento hanno lo stesso ID oggetto. | se aObj è duplicato di bObj allora aObj == bObj è vero, a.equal? bObj è falso ma a.equal? aObj è vero. |
Operatori di assegnazione Ruby
Supponiamo che la variabile a contenga 10 e la variabile b ne contenga 20, quindi -
| Operatore | Descrizione | Esempio |
|---|---|---|
| = | Operatore di assegnazione semplice, assegna i valori dagli operandi del lato destro all'operando del lato sinistro. | c = a + b assegnerà il valore di a + b in c |
| + = | Aggiungi operatore di assegnazione AND, aggiunge l'operando destro all'operando sinistro e assegna il risultato all'operando sinistro. | c + = a è equivalente a c = c + a |
| - = | Sottrai l'operatore di assegnazione AND, sottrae l'operando destro dall'operando sinistro e assegna il risultato all'operando sinistro. | c - = a è equivalente a c = c - a |
| * = | Moltiplica l'operatore di assegnazione AND, moltiplica l'operando destro con l'operando sinistro e assegna il risultato all'operando sinistro. | c * = a è equivalente a c = c * a |
| / = | Divide AND operatore di assegnazione, divide l'operando sinistro con l'operando destro e assegna il risultato all'operando sinistro. | c / = a è equivalente a c = c / a |
| % = | Modulo AND operatore di assegnazione, accetta il modulo utilizzando due operandi e assegna il risultato all'operando sinistro. | c% = a è equivalente a c = c% a |
| ** = | Operatore di assegnazione AND esponenziale, esegue il calcolo esponenziale (potenza) sugli operatori e assegna un valore all'operando sinistro. | c ** = a è equivalente a c = c ** a |
Ruby Parallel Assignment
Ruby supporta anche l'assegnazione parallela di variabili. Ciò consente di inizializzare più variabili con una singola riga di codice Ruby. Ad esempio:
a = 10
b = 20
c = 30
Questo può essere dichiarato più rapidamente usando l'assegnazione parallela -
a, b, c = 10, 20, 30
L'assegnazione parallela è utile anche per scambiare i valori contenuti in due variabili:
a, b = b, c
Ruby Bitwise Operators
L'operatore bit per bit lavora sui bit ed esegue l'operazione bit per bit.
Assumiamo se a = 60; e b = 13; ora in formato binario saranno i seguenti -
a = 0011 1100
b = 0000 1101
------------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
I seguenti operatori bit per bit sono supportati dal linguaggio Ruby.
| Operatore | Descrizione | Esempio |
|---|---|---|
| & | L'operatore AND binario copia un po 'nel risultato se esiste in entrambi gli operandi. | (a & b) darà 12, che è 0000 1100 |
| | | L'operatore OR binario copia un bit se esiste in uno degli operandi. | (a | b) darà 61, che è 0011 1101 |
| ^ | L'operatore XOR binario copia il bit se è impostato in un operando ma non in entrambi. | (a ^ b) darà 49, che è 0011 0001 |
| ~ | Binary Ones Complement Operator è unario e ha l'effetto di "ribaltare" i bit. | (~ a) darà -61, che è 1100 0011 in forma di complemento a 2 a causa di un numero binario con segno. |
| << | Operatore binario di spostamento sinistro. Il valore dell'operando sinistro viene spostato a sinistra del numero di bit specificato dall'operando destro. | a << 2 darà 240, che è 1111 0000 |
| >> | Operatore binario di spostamento a destra. Il valore dell'operando sinistro viene spostato a destra del numero di bit specificato dall'operando destro. | a >> 2 darà 15, che è 0000 1111 |
Operatori logici Ruby
I seguenti operatori logici sono supportati dal linguaggio Ruby
Supponiamo che la variabile a contenga 10 e la variabile b ne contenga 20, quindi -
| Operatore | Descrizione | Esempio |
|---|---|---|
| e | Chiamato operatore AND logico. Se entrambi gli operandi sono veri, la condizione diventa vera. | (aeb) è vero. |
| o | Chiamato Operatore OR logico. Se uno dei due operandi è diverso da zero, la condizione diventa vera. | (aob) è vero. |
| && | Chiamato operatore AND logico. Se entrambi gli operandi sono diversi da zero, la condizione diventa vera. | (a && b) è vero. |
| || | Chiamato Operatore OR logico. Se uno dei due operandi è diverso da zero, la condizione diventa vera. | (a || b) è vero. |
| ! | Chiamato operatore NOT logico. Utilizzare per invertire lo stato logico del suo operando. Se una condizione è vera, l'operatore NOT logico la renderà falsa. | ! (a && b) è falso. |
| non | Chiamato operatore NOT logico. Utilizzare per invertire lo stato logico del suo operando. Se una condizione è vera, l'operatore NOT logico la renderà falsa. | not (a && b) è falso. |
Ruby Ternary Operator
C'è un altro operatore chiamato Operatore ternario. Prima valuta un'espressione per un valore vero o falso e quindi esegue una delle due istruzioni fornite a seconda del risultato della valutazione. L'operatore condizionale ha questa sintassi:
| Operatore | Descrizione | Esempio |
|---|---|---|
| ? : | Espressione condizionale | Se la condizione è vera? Quindi valore X: altrimenti valore Y |
Ruby Range Operators
Gli intervalli di sequenza in Ruby vengono utilizzati per creare un intervallo di valori successivi, costituito da un valore iniziale, un valore finale e un intervallo di valori intermedi.
In Ruby, queste sequenze vengono create utilizzando gli operatori di intervallo ".." e "...". Il modulo a due punti crea un intervallo inclusivo, mentre il modulo a tre punti crea un intervallo che esclude il valore alto specificato.
| Operatore | Descrizione | Esempio |
|---|---|---|
| .. | Crea un intervallo dal punto iniziale al punto finale compreso. | 1..10 Crea un intervallo da 1 a 10 inclusi. |
| ... | Crea un intervallo dal punto iniziale al punto finale esclusivo. | 1 ... 10 Crea un intervallo da 1 a 9. |
Ruby definito? Operatori
definito? è un operatore speciale che assume la forma di una chiamata al metodo per determinare se l'espressione passata è definita o meno. Restituisce una stringa di descrizione dell'espressione o nil se l'espressione non è definita.
Ci sono vari utilizzi di definiti? Operatore
Utilizzo 1
defined? variable # True if variable is initialized
For Example
foo = 42
defined? foo # => "local-variable"
defined? $_ # => "global-variable"
defined? bar # => nil (undefined)
Utilizzo 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)
Utilizzo 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)
Utilizzo 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 Double Colon "::" Operatori
Si chiama un metodo del modulo facendo precedere il suo nome con il nome del modulo e un punto e si fa riferimento a una costante utilizzando il nome del modulo e due due punti.
Il :: è un operatore unario che consente di accedere da qualsiasi punto esterno alla classe o al modulo: costanti, metodi di istanza e metodi di classe definiti all'interno di una classe o di un modulo.
Remember in Ruby, anche classi e metodi possono essere considerati costanti.
Devi solo aggiungere il prefisso :: Const_name con un'espressione che restituisce la classe o l'oggetto modulo appropriato.
Se non viene utilizzata alcuna espressione di prefisso, per impostazione predefinita viene utilizzata la classe Object principale.
Ecco due esempi:
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
Precedenza degli operatori Ruby
La tabella seguente elenca tutti gli operatori dalla precedenza più alta al più basso.
| Metodo | Operatore | Descrizione |
|---|---|---|
| sì | :: | Operatore a risoluzione costante |
| sì | [] [] = | Riferimento elemento, set di elementi |
| sì | ** | Esponenziazione (aumento alla potenza) |
| sì | ! ~ + - | No, complemento, più e meno unario (i nomi dei metodi per gli ultimi due sono + @ e - @) |
| sì | * /% | Moltiplica, dividi e modulo |
| sì | + - | Addizione e sottrazione |
| sì | >> << | Spostamento bit per bit destro e sinistro |
| sì | & | Bitwise "AND" |
| sì | ^ | | "OR" esclusivo bit per bit e "OR" regolare |
| sì | <= <>> = | Operatori di confronto |
| sì | <=> == ===! = = ~! ~ | Uguaglianza e operatori di corrispondenza del modello (! = E! ~ Potrebbero non essere definiti come metodi) |
| && | Logico "AND" | |
| || | "OR" logico | |
| .. ... | Gamma (inclusiva ed esclusiva) | |
| ? : | Ternario se-allora-altro | |
| =% = {/ = - = + = | = & = >> = << = * = && = || = ** = | Incarico | |
| definito? | Verificare se il simbolo specificato è definito | |
| non | Negazione logica | |
| o e | Composizione logica |
NOTE- Gli operatori con un Sì nella colonna del metodo sono in realtà metodi e come tali possono essere sovrascritti.
