Ruby è un noto linguaggio di programmazione. Mira a migliorare la semplicità e la produttività. È anche un linguaggio di programmazione completamente orientato agli oggetti. Inoltre, Ruby è dotato di una sintassi elegante, naturale da leggere e facile da scrivere.
Qualsiasi programmazione richiede la gestione di vari tipi di dati. Un tipo di dati descrive una classe specifica di dati. Indica alla macchina come gestire i dati nel programma. I tipi di dati sono fondamentali per determinare cosa si può fare con i dati (comprese le operazioni che possono essere eseguite). In questo tutorial, andremo a approfondire i tipi di dati disponibili in Ruby. Esploreremo anche la tipizzazione dinamica. Utilizzando questa funzionalità, Ruby può determinare automaticamente il tipo di dati di una variabile senza dichiararla esplicitamente. Cominciamo!
Prerequisiti
Per esercitarsi e implementare i passaggi illustrati in questa guida, saranno necessari i seguenti componenti:
- Un sistema Linux configurato correttamente. Scopri di più su come configurare un server Ubuntu personale su CloudSigma.
- Un ambiente di sviluppo Ruby configurato correttamente. Dai un'occhiata alla documentazione ufficiale sull'installazione di Ruby su Ubuntu (usando APT).
Tipi di dati in Ruby
Ruby include tutti i tipi di dati comuni che si incontrano in qualsiasi linguaggio di programmazione: interi, float, stringhe, array, simboli, hash, ecc. Successivamente, forniremo una panoramica di come lavorare con i vari tipi di dati di Ruby.
Passo 1 – Interi
Similmente alla matematica, gli interi nella programmazione informatica sono numeri interi. Il valore può essere positivo, negativo o 0. L'intervallo di valori è il seguente:
|
1 |
{-∞, …, -1, 0, 1, …, ∞} |
È ora di provare gli interi in Ruby. Il primo esempio consiste nello stampare un semplice intero sullo schermo:
|
1 2 |
print 99 print "\n" |
Successivamente, lavoreremo con una variabile intera. Qui, la variabile sample_int contiene un valore intero (99) e la funzione print stampa il valore della variabile sullo schermo:
|
1 2 3 |
sample_int = 99 print sample_int print "\n" |
Possiamo anche fare calcoli matematici con gli interi. Il seguente esempio mostra una semplice somma di due numeri interi:
|
1 2 3 |
sample_int = 99 + 100 print sample_int print "\n" |
Quando lavoriamo con numeri grandi, spesso usiamo le virgole (,) per facilitarne la lettura. Ad esempio, un milione (1000000) viene scritto come 1,000,000 per una migliore leggibilità. Sebbene l'uso delle virgole sia vietato, Ruby consente l'uso di trattini bassi ( _) come delimitatore. Dai un'occhiata al seguente esempio:
|
1 2 3 |
sample_int = 1_000_999 print sample_int print "\n" |
L'uso dei trattini bassi migliora la leggibilità del codice, specialmente quando si ha a che fare con grandi valori interi.
Passo 2 – Numeri a virgola mobile
Un numero a virgola mobile (o float in breve) rappresenta un numero reale. Similmente alla definizione matematica, i numeri reali possono essere razionali o irrazionali. In Ruby, un float è fondamentalmente un numero contenente un punto decimale.
Proviamo a stampare un valore float sullo schermo:
|
1 2 |
print 55.66 print "\n" |
Il prossimo esempio mostra la dichiarazione di una variabile float:
|
1 2 3 |
sample_float = 55.66 print sample_float print "\n" |
Possiamo anche eseguire varie operazioni matematiche sui valori e sulle variabili float. Il seguente esempio mostra una semplice somma di due numeri float:
|
1 2 3 |
sample_float = 55.66 + 99.222 print sample_float print "\n" |
E se sommassimo un float e un intero? Il valore risultante sarà un float. Nel seguente esempio, nonostante 55.0 sia un numero intero, viene trattato come un float:
|
1 2 3 |
sample_float = 55.0 + 10 print sample_float print "\n" |
Passo 3 – Booleani
I booleani rappresentano i valori di verità del ramo logico della matematica. In Ruby, i tipi di dati booleani sono rappresentati da due valori: true e false:
-
Maggiore di
-
100 > 99: true
-
99 > 100: false
-
-
Minore di
-
500 < 999: true
-
999 < 500: false
-
-
Uguale
-
10 == 10: true
-
9 == 99: false
-
Similmente ai numeri, possiamo anche memorizzare un true o false valore in una variabile. Il seguente esempio dimostra questa funzionalità:
|
1 2 3 |
result = 9 == 99 print result print "\n" |
Passo 4 – Stringhe
In programmazione, una stringa è rappresentata come una sequenza di caratteri (lettere, numeri e simboli). In Ruby, le stringhe esistono all'interno di virgolette singole ( ') o virgolette doppie ( "). Abbiamo già trattato in dettaglio l'uso delle stringhe in Ruby, quindi questa sarà una sezione breve.
Il seguente esempio è un semplice programma hello world in Ruby:
|
1 |
print "hello world!\n" |
Possiamo anche memorizzare le stringhe nelle variabili. Il seguente esempio incorpora anche la concatenazione di stringhe:
|
1 2 |
username = "Cloudsigma" print "hello, " + username + "!\n" |
Passo 5 – Array
Un array è una struttura dati che può memorizzare una collezione di dimensioni fisse di elementi dello stesso tipo di dati. Può anche essere concettualizzato come una collezione di variabili dello stesso tipo di dati. È’ una delle strutture dati più fondamentali nella maggior parte dei linguaggi di programmazione moderni.
In Ruby, un array è definito come segue:
|
1 |
[value_1, value_2, …, value_N] |
È’ possibile creare un array di qualsiasi altro tipo di dati di cui abbiamo discusso finora (interi, float e stringhe). Ecco alcuni esempi:
-
Interi: [-5, 0, 5]
-
Float: [-9.99, -6.99, -3.99, 0, 3.99]
-
Stringhe: [“the”, “quick”, “brown”, “fox”]
Il seguente esempio implementa tutti questi tipi di array:
|
1 2 3 4 5 6 |
print [-5, 0, 5] print "\n" print [-9.99, -6.99, -3.99, 0, 3.99] print "\n" print ["the", "quick", "brown", "fox"] print "\n" |
Nota che quando la funzione print incontra un array, stampa l'intero array sullo schermo. Per maggiore comodità, incontrerai spesso gli array come variabili. Aggiorniamo il codice:
|
1 2 3 4 5 6 7 8 9 10 |
array_int = [-5, 0, 5] print array_int print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string print "\n" |
Ora possiamo lavorare con i singoli elementi degli array:
|
1 2 3 4 5 6 7 8 9 |
array_int = [-5, 0, 5] print array_int[2] print "\n" array_float = [-9.99, -6.99, -3.99, 0, 3.99] print array_float[1] print "\n" array_string = ["the", "quick", "brown", "fox"] print array_string[3] print "\n" |
Nota che in Ruby, il valore dell'indice degli array inizia con 0.
Per comodità, gli array in Ruby sono dotati dei metodi .first e .last che stampano il primo e l'ultimo elemento:
|
1 2 3 4 |
array_float = [-9.99, -6.99, -3.99, 0, 3.99] puts array_float.first puts array_float.last print "\n" |
In Ruby, gli array hanno un'altra caratteristica interessante. Possono contenere diversi tipi di dati contemporaneamente. Ad esempio, è possibile memorizzare stringhe, simboli e persino altri array:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mixed_array = [ "hello", 99.99, "world", [ "the", "quick", "brown", "fox" ] ] print mixed_array print "\n" print mixed_array[3] print "\n" |
Passo 6 – Simboli
In Ruby, un simbolo è un tipo di dati speciale che si comporta come un’etichetta o un identificatore. I simboli sono immutabili, il che significa che non possono essere modificati. I simboli appaiono come se si dichiarassero variabili senza alcun valore.
Ecco un esempio di simbolo:
|
1 |
:time_zone |
In genere, i simboli vengono utilizzati per identificare qualcosa di importante. Per altre situazioni, tuttavia, le stringhe sono più che sufficienti.
Ruby, essendo un linguaggio orientato agli oggetti, tratta tutto come un oggetto (comprese le stringhe) con la sua posizione di memoria univoca, anche se le stringhe sono identiche. Tuttavia, quando si fa riferimento a un simbolo, si tratta dello stesso oggetto in qualsiasi punto del programma, della stessa posizione di memoria.
Passo 7 – Hash
Un hash è una raccolta di chiavi e valori simile a un dizionario. Spesso, gli hash vengono utilizzati per memorizzare dati correlati, ad esempio informazioni su un utente.
Ecco un rapido esempio di hash. Abbiamo creato un hash user_info contenente il nome utente e la password di un utente:
|
1 2 3 4 5 6 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info print "\n" |
Per recuperare i valori di una coppia chiave-valore, dobbiamo usare la chiave. Il seguente esempio dimostra questo processo:
|
1 2 3 4 5 6 7 |
user_info = { "username" => "HelloWorld999", "password" => "password123" } print user_info["username"] print "\n" |
Ruby consente anche di definire un hash utilizzando sintassi leggermente diverse ( : invece di =>):
|
1 2 3 4 5 6 |
user_info = { username: "HelloWorld999", password: "password123" } print user_info[:password] print "\n" |
Questa struttura sintattica è simile alla sintassi utilizzata in altri linguaggi, ad esempio, JavaScript. In questa struttura sintattica, le chiavi sono definite come simboli. Ecco perché invece di usare "username", stiamo usando: username per accedere al valore.
Tipizzazione dinamica
Potresti aver già notato che quando si dichiara una variabile, non dobbiamo assegnare esplicitamente un tipo di dati. Al contrario, il valore della variabile determina il tipo di dati. Ruby utilizza la dynamic typing in cui il controllo dei tipi viene eseguito a runtime. Al contrario, i tipi di dati vengono determinati durante la compilazione nei linguaggi di programmazione a static typing (C/C++, ad esempio).
Nel seguente esempio, tutti i valori assegnati alla variabile dyn_var sono validi:
|
1 2 3 4 5 |
dyn_var = 123 dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" dyn_var |
Nei linguaggi a tipizzazione dinamica, siamo liberi di riutilizzare una variabile esistente per memorizzare diversi tipi di dati. Qui, l'esempio precedente viene aggiornato per dimostrare questo fenomeno:
|
1 2 3 4 5 6 7 |
dyn_var = 123 puts dyn_var dyn_var = 456.789 dyn_var = true dyn_var = "the quick brown fox" puts dyn_var dyn_var |
Come dimostra questo esempio, ogni volta che viene assegnato un nuovo valore, questo cambia il tipo di dati di dyn_var al volo. È utile quando si converte un tipo di dati in un altro. Il seguente esempio lo dimostra:
|
1 2 3 4 |
print "inserisci lunghezza: " length = gets.chop length = length.to_f puts length |
Qui,
-
Poiché gli input da tastiera sono stringhe, length all’inizio è una stringa.
-
Poiché il valore desiderato è un float, stiamo convertendo il valore stringa in float utilizzando il metodo to_f.
-
A causa del cambio di valore, length viene assegnato il tipo di dati float. Questo è ciò che vediamo quando stampiamo il suo valore sullo schermo.
Cosa succederebbe se provassimo a mescolare due tipi di dati diversi? Ruby genererà un errore. Dai un’occhiata:
|
1 |
print 9 + "77" |
Identificazione del tipo di dati
In Ruby, tutto viene trattato come un oggetto. Ogni oggetto in Ruby è dotato del metodo class. Quando viene chiamato, questo metodo indica qual è il tipo di dati dell'origine. Ecco alcuni esempi di utilizzo del class metodo:
|
1 2 3 4 |
puts 55.class puts (55.55).class puts true.class puts nil.class |
Un altro modo per conoscere il tipo di dati consiste nell'utilizzare il kind_of? metodo. Verifica il tipo di dati dell'oggetto rispetto al tipo di dati richiesto e restituisce un valore booleano. Dai un'occhiata al seguente esempio:
|
1 2 |
puts 55.kind_of?(Float) puts 55.kind_of?(Integer) |
Allo stesso modo, c’è un altro metodo is_a? che confronta il tipo di dati e restituisce un valore booleano. L'unica differenza è l'etichetta del metodo. Tuttavia, potrebbe essere preferibile perché è un po’ più facile da leggere e comprendere per gli sviluppatori. Aggiorna l'esempio precedente con is_a?:
|
1 2 |
puts 55.is_a?(Float) puts 55.is_a?(Integer) |
Considerazioni finali
Lavorare con qualsiasi linguaggio di programmazione richiede una buona comprensione dei tipi di dati che supporta. In questa guida abbiamo esplorato i tipi di dati più comuni utilizzati nella programmazione Ruby. Abbiamo discusso e mostrato interi, float, stringhe, simboli, booleani e hash (con esempi).
Dai un'occhiata ad altri tutorial del nostro blog che ti aiuteranno a esplorare Ruby:
- Installare Ruby on Rails con RVM su Ubuntu 20.04
- Configurare Ruby on Rails con PostgreSQL
- Utilizzare MySQL con un'app Ruby on Rails su Ubuntu 21.04
- Esplorare CloudSigma PaaS: come utilizzare i servizi di hosting PaaS di Ruby?
Buona programmazione!




































Commenti
Ancora nessun commento. Scrivi il primo.