Prima di introdurre i principali aspetti del linguaggio diamo uno sguardo veloce alle principali convenzioni sui nomi e sui commenti. Altre convenzioni, e semplici suggerimenti sullo stile, verranno introdotte durante lo svolgimento della guida.
Nomi
Iniziamo a vedere le convenzioni sui nomi delle variabili, dei metodi e delle classi. Di seguito una rapida carrellata con degli esempi esplicativi:
- Le variabili locali devono iniziare con una lettera minuscola o col carattere underscore.
- Le variabili globali con il segno
$
. - Le variabili di istanza con il segno
@
. - Le variabili di classe con due segni
@
. - Le costanti con una lettera maiuscola.
Ecco degli esempi:
nome = "Matz" # nome è una variabile locale Mesi = 12 # Mesi è una costante MESI = 12 # anche MESI è una costante @linguaggio = "ruby" # @linguaggio è una variabile di istanza @Linguaggio = "ruby" # anche @Linguaggio è una variabile di istanza $anno = 2007 # $anno è una variabile globale @@counter = 0 # @@counter è una variabile di classe
Inoltre i nomi delle classi, e dei moduli, devono iniziare con la lettera maiuscola, mentre i nomi dei metodi e dei suoi parametri devono iniziare per lettera minuscola o per underscore "_". Ad esempio:
module Geometria class Quadrato def disegna
Le parole chiave del Ruby, che come accade per tutti i linguaggi non possono essere utilizzate in nessun altro modo, sono:
BEGIN END alias and begin break case class def defined? do else elsif end ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield
Ne scopriremo il significato nel corso della guida.
Commenti
I commenti sono identificati dal segno #, è considerato commento tutto quello che lo segue fino alla fine della riga:
a = 1 # Questo è un commento. # L'intera riga è un commento
In alternativa è possibile inserire più righe di commento tra i tag =begin
e =end
, in questo modo:
=begin
Questo è un commento
su più righe
=end
È possibile anche inserire dei commenti che saranno utilizzati per generare documentazione RDoc; torneremo su questo argomento in un prossimo capitolo.
Documentazione
Come accennato prima, uno strumento fondamentale in fase di apprendimento è ri che prende come argomento il nome di una classe, di un modulo o di un metodo e ne mostra a video una breve descrizione con tanto di esempi. Ad esempio per sapere cosa fa e come si usa il metodo reverse della classe String, che abbiamo usato prima, basta scrivere:
# ri String.reverse --------------------------------------------------------- String#reverse str.reverse => new_str ------------------------------------------------------------------------ Returns a new string with the characters from _str_ in reverse order. "stressed".reverse #=> "desserts"
In alternativa al punto si può utilizzare anche il carattere "#" (ri String#reverse
); per i metodi di classe si usa invece la forma con i due punti "::". Se non si conosce il nome esatto è possibile anche fornire come argomento una indicazione parziale, ad esempio
# ri String.re More than one method matched your request. You can refine your search by asking for information on one of: String#reverse!, String#replace, String#reverse
In questo caso ci viene fornito in output una lista di possibili scelte. Torniamo un attimo ai nomi dei metodi; il lettore attento avrà di certo notato nell'output precedente la presenza, oltre a reverse
, del metodo reverse!
e si starà chiedendo qual'è la differenza tra i due. In Ruby c'è una convenzione che prevede che i metodi che terminano con il punto esclamativo siano metodi distruttivi che non creano una nuova istanza ma modificano direttamente il valore. Analogamente ci sono i metodi di verifica, i cui nomi terminano per punto interrogativo, che svolgono in genere funzioni di verifica e restituiscono un valore booleano.
Infine una breve nota ripresa da Programming Ruby di Dave Thomas. Aggiungendo questa funzione
def ri(*names) system(%{ri #{names.map {|name| name.to_s}.join(" ")}}) end
al file di configurazione .irbrc sarà possibile utilizzare ri
all'interno di irb
.