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 .