English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Operatori Ruby

Manuale avanzato Ruby. Ad esempio, a + b viene interpretato come a.+(b), dove il metodo + del variabile a viene chiamato, b come parametro della chiamata di metodo.

Per ogni operatore (+ - * / % ** & | ^ << >> && ||) c'è un operatore di assegnazione abbreviato corrispondente (+= -= ecc.).

Operatore aritmetico Ruby

Supponiamo che il valore della variabile a sia 10 e il valore della variabile b sia 20, allora:

OperatoreDescrizioneEsempio
+Addizione - Aggiunge gli operandi da entrambi i lati dell'operatorea + b otterrà 30
-Sottrazione - Sottrae l'operando di destra dall'operando di sinistraa - b otterrà -10
*Moltiplicazione - Moltiplica gli operandi da entrambi i lati dell'operatorea * b otterrà 200
/Divisione - Divide l'operando di sinistra per l'operando di destrab / a otterrà 2
%Modulo - Divide l'operando di sinistra per l'operando di destra, restituendo il restob % a otterrà 0
**Esponenziale - Esegue un calcolo esponenzialea**b otterrà 10 alla 20esima potenza

Operatore di confronto Ruby

Supponiamo che il valore della variabile a sia 10 e il valore della variabile b sia 20, allora:

OperatoreDescrizioneEsempio
==Controlla se i valori degli operandi sono uguali, se lo sono, la condizione è vera.(a == b) non è vero.
!=Controlla se i valori degli operandi sono uguali, se non lo sono, la condizione è vera.(a != b) è vero.
>Controlla se il valore dell'operando di sinistra è maggiore del valore dell'operando di destra, se lo è, la condizione è vera.(a > b) non è vero.
<Controlla se il valore dell'operando di sinistra è minore del valore dell'operando di destra, se lo è, la condizione è vera.(a < b) è vero.
>=Controlla se il valore dell'operando di sinistra è maggiore o uguale al valore dell'operando di destra, se lo è, la condizione è vera.(a >= b) non è vero.
<=Controlla se il valore dell'operands sinistro è minore o uguale al valore dell'operands destro, se lo è, la condizione è vera.(a <= b) è vero.
<=>Operatore di confronto combinato. Se il primo operand è uguale al secondo operand, restituisce 0, se il primo operand è maggiore del secondo operand, restituisce 1, se il primo operand è minore del secondo operand, restituisce -1.(a <=> b) restituisce -1.
===usato per testare case Uguaglianza nel corpo della clausola when della sentenza.(1...10) === 5 restituisce true.
.eql?Se il ricevente e i parametri hanno lo stesso tipo e lo stesso valore, restituisce true.1 == 1.0 restituisce true, ma 1.eql?(1.0) restituisce false.
equal?Se il ricevente e i parametri hanno lo stesso id dell'oggetto, restituisce true.Se aObj è una copia di bObj, allora aObj == bObj restituisce true, a.equal?bObj restituisce false, ma a.equal?aObj restituisce true.

Operatore di assegnamento Ruby

Supponiamo che il valore della variabile a sia 10 e il valore della variabile b sia 20, allora:

OperatoreDescrizioneEsempio
=Operatore di assegnamento semplice, assegna il valore dell'operands destro all'operands sinistroc = a + b assegnerà il valore di a + b a c
+=Operatore di assegnamento somma, assegna il risultato della somma dell'operands destro con l'operands sinistro all'operands sinistroc += a è equivalente a c = c + a
-=Operatore di assegnamento sottrazione, assegna il risultato della sottrazione dell'operands destro dall'operands sinistro all'operands sinistroc -= a è equivalente a c = c - a
*=Operatore di assegnamento moltiplicazione, assegna il risultato della moltiplicazione dell'operands destro per l'operands sinistro all'operands sinistroc *= a è equivalente a c = c * a
/=Operatore di assegnamento divisione, assegna il risultato della divisione dell'operands sinistro per l'operands destro all'operands sinistroc /= a è equivalente a c = c / a
%=Operatore di assegnamento modulo, calcola il modulo dei due operands e assegna il risultato all'operands sinistroc %= a è equivalente a c = c % a
**=Operatore di assegnamento esponenziale, esegue il calcolo esponenziale e assegna il risultato al operands sinistroc **= a è equivalente a c = c ** a

Assegnamento parallelo Ruby

Ruby supporta anche l'assegnamento parallelo delle variabili. Questo permette di inizializzare più variabili in una singola riga di codice Ruby. Ad esempio:

a = 10
b = 20
c = 30

L'assegnamento parallelo può dichiarare più velocemente:

a, b, c = 10, 20, 30

L'assegnamento parallelo è molto utile anche per scambiare i valori di due variabili:

a, b = b, c

Operatore di bitwise Ruby

Gli operatori di bit operano sui bit e eseguono le operazioni bit per bit.

Supponiamo che se a = 60 e b = 13, ora li mostriamo in formato binario:

a = 0011 1100

b = 0000 1101

-----------------

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a = 1100 0011

La tabella seguente elenca gli operatori bit a bit supportati da Ruby.

OperatoreDescrizioneEsempio
&Se esiste contemporaneamente in entrambi gli operandi, l'operatore AND binario copia un bit nel risultato.(a & b) avrà un valore di 12, ossia 0000 1100
|Se esiste in uno degli operandi, l'operatore OR binario copia un bit nel risultato.(a | b) avrà un valore di 61, ossia 0011 1101
^Se esiste in uno degli operandi ma non in entrambi, l'operatore XOR binario copia un bit nel risultato.(a ^ b) avrà un valore di 49, ossia 0011 0001
~L'operatore di complemento a due binario è un operatore unario che ha l'effetto di "inverter" i bit, ossia 0 diventa 1 e 1 diventa 0.(~a) avrà un valore di -61, ossia 1100 0011, che è la forma di complemento a due di un numero binario con segno.
<<Operatore di spostamento a sinistra binario. Il valore del primo operando si sposta a sinistra di un numero di posizioni specificato dal secondo operando.a << 2 avrà un valore di 240, ossia 1111 0000
>>Operatore di spostamento a destra binario. Il valore del primo operando si sposta a destra di un numero di posizioni specificato dal secondo operando.a >> 2 avrà un valore di 15, ossia 0000 1111

Operatori logici Ruby

La tabella seguente elenca gli operatori logici supportati da Ruby.

Supponiamo che il valore della variabile a sia 10 e il valore della variabile b sia 20, allora:

OperatoreDescrizioneEsempio
andChiamato operatore logico e. Se entrambi gli operandi sono veri, la condizione è vera.(a and b) è vero.
orChiamato operatore logico o. Se almeno uno degli operandi è non zero, la condizione è vera.(a or b) è vero.
&&Chiamato operatore logico e. Se entrambi gli operandi sono non zero, la condizione è vera.(a && b) è vero.
||Chiamato operatore logico o. Se almeno uno degli operandi è non zero, la condizione è vera.(a || b) è vero.
!Chiamato operatore logico non. Serve per invertire lo stato logico dell'operando. Se la condizione è vera, l'operatore logico non la renderà falsa.!(a && b) è falso.
notChiamato operatore logico non. Serve per invertire lo stato logico dell'operando. Se la condizione è vera, l'operatore logico non la renderà falsa.not(a && b) è falso.

Operatore ternario Ruby

Esistono più di una operazioni chiamate operatori ternari. Il primo calcola il valore vero/falso dell'espressione, poi in base a questo risultato decide di eseguire una delle due istruzioni successive. La sintassi dell'operatore condizionale è la seguente:

OperatoreDescrizioneEsempio
? :Espressione condizionaleSe la condizione è vera ? allora il valore è X : altrimenti il valore è Y

Operatori di intervallo in Ruby

In Ruby, gli intervalli di sequenza vengono utilizzati per creare una serie di valori consecutivi - includono il valore di inizio, il valore di fine (a seconda del caso) e i valori tra di loro.

In Ruby, queste sequenze sono create utilizzando gli operatori di intervallo ".." e "...". La forma a due punti crea un intervallo che contiene sia il valore di inizio che il valore di fine, mentre la forma a tre punti crea un intervallo che contiene solo il valore di inizio e non il valore di fine.

OperatoreDescrizioneEsempio
..Crea un intervallo da un punto di inizio a un punto di fine (incluso il punto di fine)1..10 crea un intervallo da 1 a 10
...Crea un intervallo da un punto di inizio a un punto di fine (escluso il punto di fine)1...10 crea un intervallo da 1 a 9

Operatore defined? in Ruby

defined? è un operatore speciale che, sotto forma di chiamata di metodo, determina se un'espressione è definita. Restituisce la stringa di descrizione dell'espressione, se l'espressione non è definita restituisce nil.

Di seguito sono elencati vari usi dell'operatore defined?

Uso 1

definito? variable # => True se variable è stata inizializzata

Ad esempio:

foo = 42
definito? foo # => "variabile-locale"
definito? $_ # => "variabile-globale"
definito? bar # => nil (non definito)

Uso 2

definito? method_call # => True se il metodo è già definito

Ad esempio:

definito? puts # => "method"
definito? puts(bar) # => nil (bar non definito qui)
definito? unpack # => nil (non definito qui)

Uso 3

# => True se esiste un metodo che può essere chiamato con super
definito? super

Ad esempio:

definito? super # => "super" (se può essere chiamato)
definito? super # => nil (se non può essere chiamato)

Uso 4

definito? yield # => True se è stato passato un blocco di codice

Ad esempio:

definito? yield # => "yield" (se è stato passato un blocco)
definito? yield # => nil (se non è stato passato un blocco)

Il punto di Ruby "." e l'operatore a doppio duepunto "::"

Puoi chiamare i metodi di una classe o modulo aggiungendo il nome della classe o modulo e . al nome del metodo. Puoi anche utilizzare il nome della classe o modulo e due duepunti :: per riferirti a costanti all'interno della classe o modulo.

:: è un operatore unario, che permette di definire costanti, esempi di metodo e metodi di classe all'interno di una classe o modulo, accessibili da qualsiasi parte fuori dalla classe o modulo.

Ricorda:In Ruby, le classi e i metodi possono essere trattati come costanti.

Ti basta aggiungere il nome del costante all'inizio dell'espressione. :: Un prefisso, si può restituire l'oggetto appropriato della classe o modulo.

Se l'espressione prima di :: è il nome di una classe o modulo, restituisce il valore della costante corrispondente all'interno della classe o modulo; se non c'è un'espressione prefissa prima di ::, restituisce il valore della costante corrispondente nel tipo Object principale. .

Ecco due esempi:

MR_COUNT = 0 # Definita nel tipo Object principale
module Foo
  MR_COUNT = 0
  ::MR_COUNT = 1 # Imposta il conteggio globale a 1
  MR_COUNT = 2 # Imposta il conteggio locale a 2
end
puts MR_COUNT # Questa è la costante globale
puts Foo::MR_COUNT # Questa è la costante locale di "Foo"

Secondo esempio:

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

Priorità degli operatori Ruby

La seguente tabella elenca tutti gli operatori in ordine di priorità, da alta a bassa.

MetodoOperatoreDescrizione
È::Operatore di解析 costante
È[ ] [ ]=Riferimento all'elemento, insieme di elementi
È**Indice
È! ~ + -Negazione, complemento, unario addizione, unario sottrazione (i nomi dei metodi degli ultimi due sono +@ e -@)
È* / %Moltiplicazione, divisione, modulo
È+ -Addizione e sottrazione
È>>> <<Spostamento a destra, spostamento a sinistra
È&AND
È^ |Operatore XOR, OR
È<= < > >=Operatore di confronto
È<=> == === != =~ !~Operatore di uguaglianza e di abbinamento di modello (!= e !~ non possono essere definiti come metodi)

&&E logico

||Orologio logico

.. ...Range (incluso, non incluso)

? :Ternario if-then-else

= %= { /= -= += |= &= >>= <<= *= &&= ||= **=Assegnazione

defined?Controlla se il simbolo specificato è definito

notNegazione logica

or andComposizione logica

Attenzione:È indicato nella lista dei metodi come È Gli operatori sono effettivamente metodi, quindi possono essere sovrascritti.