Ruby - Variabili, costanti e letterali
Le variabili sono le posizioni di memoria, che contengono tutti i dati che devono essere utilizzati da qualsiasi programma.
Esistono cinque tipi di variabili supportate da Ruby. Hai già esaminato una piccola descrizione di queste variabili anche nel capitolo precedente. Questi cinque tipi di variabili sono spiegati in questo capitolo.
Variabili globali di Ruby
Le variabili globali iniziano con $. Le variabili globali non inizializzate hanno valore nil e producono avvisi con l'opzione -w.
L'assegnazione a variabili globali altera lo stato globale. Non è consigliabile utilizzare variabili globali. Rendono i programmi criptici.
Ecco un esempio che mostra l'utilizzo della variabile globale.
#!/usr/bin/ruby
$global_variable = 10
class Class1
def print_global
puts "Global variable in Class1 is #$global_variable"
end
end
class Class2
def print_global
puts "Global variable in Class2 is #$global_variable"
end
end
class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global
Qui $ global_variable è una variabile globale. Questo produrrà il seguente risultato:
NOTE - In Ruby, PUOI accedere al valore di qualsiasi variabile o costante inserendo un carattere cancelletto (#) appena prima di quella variabile o costante.
Global variable in Class1 is 10
Global variable in Class2 is 10
Variabili di istanza di Ruby
Le variabili di istanza iniziano con @. Le variabili di istanza non inizializzate hanno il valore nil e producono avvisi con l'opzione -w.
Di seguito è riportato un esempio che mostra l'utilizzo delle variabili di istanza.
#!/usr/bin/ruby
class Customer
def initialize(id, name, addr)
@cust_id = id
@cust_name = name
@cust_addr = addr
end
def display_details()
puts "Customer id #@cust_id"
puts "Customer name #@cust_name"
puts "Customer address #@cust_addr"
end
end
# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")
# Call Methods
cust1.display_details()
cust2.display_details()
Qui, @cust_id, @cust_name e @cust_addr sono variabili di istanza. Questo produrrà il seguente risultato:
Customer id 1
Customer name John
Customer address Wisdom Apartments, Ludhiya
Customer id 2
Customer name Poul
Customer address New Empire road, Khandala
Variabili di classe Ruby
Le variabili di classe iniziano con @@ e devono essere inizializzate prima di poter essere utilizzate nelle definizioni dei metodi.
Fare riferimento a una variabile di classe non inizializzata produce un errore. Le variabili di classe sono condivise tra i discendenti della classe o del modulo in cui sono definite le variabili di classe.
L'override delle variabili di classe produce avvisi con l'opzione -w.
Ecco un esempio che mostra l'utilizzo della variabile di classe:
#!/usr/bin/ruby
class Customer
@@no_of_customers = 0
def initialize(id, name, addr)
@cust_id = id
@cust_name = name
@cust_addr = addr
end
def display_details()
puts "Customer id #@cust_id"
puts "Customer name #@cust_name"
puts "Customer address #@cust_addr"
end
def total_no_of_customers()
@@no_of_customers += 1
puts "Total number of customers: #@@no_of_customers"
end
end
# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")
# Call Methods
cust1.total_no_of_customers()
cust2.total_no_of_customers()
Qui @@ no_of_customers è una variabile di classe. Questo produrrà il seguente risultato:
Total number of customers: 1
Total number of customers: 2
Variabili locali di Ruby
Le variabili locali iniziano con una lettera minuscola o _. L'ambito di una variabile locale varia da class, module, def o do all'estremità corrispondente o dalla parentesi graffa di apertura di un blocco alla sua parentesi chiusa {}.
Quando si fa riferimento a una variabile locale non inizializzata, viene interpretata come una chiamata a un metodo che non ha argomenti.
L'assegnazione a variabili locali non inizializzate serve anche come dichiarazione di variabili. Le variabili iniziano a esistere fino a quando non viene raggiunta la fine dell'ambito corrente. La durata delle variabili locali viene determinata quando Ruby analizza il programma.
Nell'esempio precedente, le variabili locali sono id, name e addr.
Costanti di rubino
Le costanti iniziano con una lettera maiuscola. È possibile accedere alle costanti definite all'interno di una classe o di un modulo dall'interno di quella classe o modulo e quelle definite all'esterno di una classe o di un modulo sono accessibili globalmente.
Le costanti non possono essere definite all'interno dei metodi. Fare riferimento a una costante non inizializzata produce un errore. L'esecuzione di un'assegnazione a una costante già inizializzata produce un avviso.
#!/usr/bin/ruby
class Example
VAR1 = 100
VAR2 = 200
def show
puts "Value of first Constant is #{VAR1}"
puts "Value of second Constant is #{VAR2}"
end
end
# Create Objects
object = Example.new()
object.show
Qui VAR1 e VAR2 sono costanti. Questo produrrà il seguente risultato:
Value of first Constant is 100
Value of second Constant is 200
Ruby Pseudo-Variabili
Sono variabili speciali che hanno l'aspetto di variabili locali ma si comportano come costanti. Non è possibile assegnare alcun valore a queste variabili.
self - L'oggetto ricevitore del metodo corrente.
true - Valore che rappresenta vero.
false - Valore che rappresenta falso.
nil - Valore che rappresenta undefined.
__FILE__ - Il nome del file sorgente corrente.
__LINE__ - Il numero di riga corrente nel file di origine.
Ruby Basic Literals
Le regole che Ruby usa per i letterali sono semplici e intuitive. Questa sezione spiega tutti i letterali Ruby di base.
Numeri interi
Ruby supporta i numeri interi. Un numero intero può variare da -2 30 a 2 30-1 o da -2 62 a 2 62-1 . I numeri interi all'interno di questo intervallo sono oggetti della classe Fixnum e gli interi al di fuori di questo intervallo sono memorizzati negli oggetti della classe Bignum .
Si scrivono interi utilizzando un segno iniziale opzionale, un indicatore di base opzionale (0 per ottale, 0x per esadecimale o 0b per binario), seguito da una stringa di cifre nella base appropriata. I caratteri di sottolineatura vengono ignorati nella stringa di cifre.
È anche possibile ottenere il valore intero, corrispondente a un carattere ASCII o eseguire l'escape della sequenza precedendolo con un punto interrogativo.
Esempio
123 # Fixnum decimal
1_234 # Fixnum decimal with underline
-500 # Negative Fixnum
0377 # octal
0xff # hexadecimal
0b1011 # binary
?a # character code for 'a'
?\n # code for a newline (0x0a)
12345678901234567890 # Bignum
NOTE - La classe e gli oggetti sono spiegati in un capitolo separato di questo tutorial.
Numeri fluttuanti
Ruby supporta i numeri mobili. Sono anche numeri ma con decimali. I numeri in virgola mobile sono oggetti della classe Float e possono essere uno dei seguenti:
Esempio
123.4 # floating point value
1.0e6 # scientific notation
4E20 # dot not required
4e+20 # sign before exponential
Valori letterali stringa
Le stringhe Ruby sono semplicemente sequenze di byte a 8 bit e sono oggetti della classe String. Le stringhe con virgolette doppie consentono la sostituzione e la notazione con barra rovesciata ma le stringhe con virgolette singole non consentono la sostituzione e consentono la notazione con barra rovesciata solo per \\ e \ '
Esempio
#!/usr/bin/ruby -w
puts 'escape using "\\"';
puts 'That\'s right';
Questo produrrà il seguente risultato:
escape using "\"
That's right
Puoi sostituire il valore di qualsiasi espressione Ruby in una stringa utilizzando la sequenza #{ expr }. Qui, expr potrebbe essere qualsiasi espressione rubino.
#!/usr/bin/ruby -w
puts "Multiplication Value : #{24*60*60}";
Questo produrrà il seguente risultato:
Multiplication Value : 86400
Notazioni con barra rovesciata
Di seguito è riportato l'elenco delle notazioni backslash supportate da Ruby -
Notazione | Carattere rappresentato |
---|---|
\ n | Nuova riga (0x0a) |
\ r | Ritorno a capo (0x0d) |
\ f | Formfeed (0x0c) |
\ b | Backspace (0x08) |
\un | Campana (0x07) |
\ e | Fuga (0x1b) |
\S | Spazio (0x20) |
\ nnn | Notazione ottale (n = 0-7) |
\ xnn | Notazione esadecimale (n è 0-9, af o AF) |
\ cx, \ Cx | Control-x |
\ Mx | Meta-x (c | 0x80) |
\ M- \ Cx | Meta-Control-x |
\X | Carattere x |
Per maggiori dettagli su Ruby Strings, vai su Ruby Strings .
Ruby Arrays
I valori letterali di Ruby Array vengono creati inserendo una serie di riferimenti a oggetti separati da virgole tra parentesi quadre. Una virgola finale viene ignorata.
Esempio
#!/usr/bin/ruby
ary = [ "fred", 10, 3.14, "This is a string", "last element", ]
ary.each do |i|
puts i
end
Questo produrrà il seguente risultato:
fred
10
3.14
This is a string
last element
Per maggiori dettagli su Ruby Arrays, consulta Ruby Arrays .
Ruby Hash
Un Ruby Hash letterale viene creato inserendo un elenco di coppie chiave / valore tra parentesi graffe, con una virgola o la sequenza => tra la chiave e il valore. Una virgola finale viene ignorata.
Esempio
#!/usr/bin/ruby
hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
hsh.each do |key, value|
print key, " is ", value, "\n"
end
Questo produrrà il seguente risultato:
red is 3840
green is 240
blue is 15
Per maggiori dettagli su Ruby Hash, consulta Ruby Hash .
Ruby Ranges
Un intervallo rappresenta un intervallo che è un insieme di valori con un inizio e una fine. Gli intervalli possono essere costruiti utilizzando i letterali s..e e s ... e, o con Range.new.
Intervalli costruiti utilizzando .. vanno dall'inizio alla fine in modo inclusivo. Quelli creati utilizzando ... escludono il valore finale. Quando vengono utilizzati come iteratori, gli intervalli restituiscono ogni valore nella sequenza.
Un intervallo (1..5) significa che include 1, 2, 3, 4, 5 valori e un intervallo (1 ... 5) significa che include 1, 2, 3, 4 valori.
Esempio
#!/usr/bin/ruby
(10..15).each do |n|
print n, ' '
end
Questo produrrà il seguente risultato:
10 11 12 13 14 15
Per maggiori dettagli su Ruby Ranges, vai su Ruby Ranges .