Ruby basics

Una specie di reference guide introduttiva dedicata agli aspetti fondamentali del linguaggio.

Tutti gli esempi sono eseguiti con la versione 2.7.4 di Ruby.

Stampare roba

Il metodo puts stampa l’argomento seguito da un newline. puts conserva anche eventuali line break (ritorno a capo) presenti nel suo argomento.

puts "Ciao!"
puts "Buonasera
a tutti!"
Output dell’esecuzione delle istruzioni puts.

Il metodo print è analogo a puts, ma non stampa il newline alla fine del suo argomento. Tuttavia anche print conserva i line break.

print "Ciao!"
print "Buonasera
a tutti!"
Output dell’esecuzione delle istruzioni print.

Il metodo p è simile ai precedenti, ma il suo output può fornire maggiori informazioni circa la natura dell’oggetto stampato. Inoltre, a differenza di puts e print, non conserva i line break ed altri caratteri speciali ma ne stampa il simbolo corrispondente. Anche il metodo p stampa il newline alla fine.

p "Ciao!"
p "Buonasera
a tutti!"
Output delle istruzioni p.

Tutti i metodi visti finora, quando devono stampare un oggetto che “non sanno” convertire in stringa, ne stampano il corrispondente id:

class Qualcosa
end

q = Qualcosa.new
puts q
print q
p q
Output dei metodi di stampa quando l’argomento è un oggetto “sconosciuto”.

Le classi e la programmazione ad oggetti saranno argomento di un altro articolo.

Variabili e operatori aritmetici

I classici operatori matematici presenti ovviamente in tutti gli altri linguaggi di programmazione.

Nell’esempio sottostante faccio uso di variabili, anche se non le ho introdotte esplicitamente. Le variabili sono dei contenitori usati per memorizzare valori o, più precisamente, per contenere riferimenti ad oggetti. Essendo un concetto comune a tutti i linguaggi di programmazione, non ritengo sia necessario spiegare ulteriormente a cosa servono.

Ruby è un linguaggio tipizzato dinamicamente, quindi non è necessario specificare in anticipo che tipo di oggetto dovrà essere contenuto in una variabile.

## Addizione
sum = 10 + 12
puts sum # stampa 22

## Sottrazione
sub = 10 - 12
puts sub # stampa -2

## Moltiplicazione
mul = 10 * 4
puts mul # stampa 40

## Divisione tra interi
div = 10 / 4
puts div # stampa 2; il risultato è un intero!!!

## Divisione tra float
div = 10.0 / 4
puts div # stampa 2.5; il risultato è un float

## Modulo (resto)
mod = 10 % 4
puts mod # stampa 2

## Concatenazione di stringhe
s = "Ciao!" + "Come stai?"
puts s # stampa "Ciao!Come stai?"

puts "Ciao" + 3 # produce un TypeError!

Una piccola precisazione per quello che riguarda la divisione: se entrambi gli operatori sono interi, Ruby mostrerà il risultato della divisione intera. Da questo punto di vista, il comportamento è lo stesso di quello di Python 2, ma diverso rispetto a quello che accade con Python 3:

# Python 2.7.18
print(10 / 4) # stampa 2
# Python 3.8.10
print(10 / 4) # stampa 2.5

Costanti

Le variabili, per definizione, contengono oggetti mutabili. Analogamente ad altri linguaggi, anche in Ruby possiamo usare le costanti, ovvero contenitori che hanno un valore fisso che non cambia durante l’esecuzione del programma.

In Ruby le costanti si definiscono usando identificatori che iniziano con una lettera maiuscola. Le best practices più diffuse suggeriscono di usare tutte lettere maiuscole.

# Costanti
Costante = 3.14 # Questa è considerata una costante dall'interprete Ruby
PI = 3.14 # Metodo raccomandato per definire una costante, ovvero con tutte lettere maiuscole

Nonostante siano “costanti”, in realtà Ruby non impedisce di cambiarne il valore ma, se lo si fa, mostra un warning. Anche in questo caso c’è una differenza rispetto a Python, in cui non c’è un reale supporto alle costanti ma in cui si usa la convenzione di usare identificatori tutti maiuscoli per definirle. Se si prova a modificare il valore di una costante in Python, l’interprete non mostra errori né warning di alcun genere.

# Costanti

PI = 3.14
puts PI

PI = "Pigrecooooo!"
puts PI
Warning dell’interprete Ruby se si tenta di modificare una costante

Se proviamo a fare una cosa simile in Python 3, il risultato è il seguente:

PI = 3.14
print(PI)

PI = "Ciao Pigreco!"
print(PI)
Nessun warning dall’interprete Python

Commenti

Nel codice Ruby è possibile aggiungere commenti su singola riga o commenti multiline.

# Commenti

# Questo è un commento su una singola riga.
# Anche questo è un commento su singola riga.

puts "Oggi è una bella giornata!" # anche questo è un commento, ma inline col codice

=begin
Questo è un commento
multiriga. Tutto quello che viene
scritto tra i delimitatori begin/end è considerato
un commento.
=end

Qui si conclude questa prima panoramica sugli elementi essenziali del linguaggio Ruby. Nei prossimi articoli andremo più nel dettaglio, illustrando argomenti più “avanzati” e alcune particolarità del linguaggio.