Successivo

News

Ruby tuesday: il lessico

Michele Costabile | 10 Marzo 2009

È martedì e quindi ci viene in mente Ruby, insieme alla canzone dei Rolling Stones con quei suggestivi flauti dolci […]

È martedì e quindi ci viene in mente Ruby, insieme alla canzone dei Rolling Stones con quei suggestivi flauti dolci di Brian Jones.
Cominciamo quindi una serie di piccoli tuffi nel linguaggio partendo dall’aspetto lessicale.


Per seguire il tutorial possiamo installare Ruby sul nostro sistema, come abbiamo spiegato in un precedente intervento, e lanciare il comando irb, oppure collegarci a tryRuby.hobix.com, dove è a disposizione un interprete Ruby online.
Un programma Ruby è fatto dei consueti elementi lessicali familiari a tutti i programmatori, come identificatori, espressioni ecc.

Spazi bianchi

Gli spazi bianchi sono sostanzialmente ignorati dall’analizzatore lessicale, ma servono a dirimere casi ambigui, come per esempio l’ambiguità  fra una chiamata a funzione e un’espressione.

In irb definiamo una funzione con un parametro, per esempio:

>> def a(x)
>> print x
>> end
=> nil

definiamo una variabile b

>> b = 2
=> 2

Adesso, possiamo chiamare la funzione a con il parametro +b, come segue

>> a +b
2=> nil

Uno spazio fra l’operatore e l’identificatore forza Ruby a interpretare l’istruzione come un’espressione, ne segue un errore perché uno degli operandi non è una variabile

>> a +b
2=> nil
ArgumentError: wrong number of arguments (0 for 1)
	from (irb):10:in `a'
	from (irb):10

Casi di questo genere sono segnalati lanciando l’interprete Ruby con l’opzione -w.

Ritorni a capo

Ruby segue il principio filosofico della minima sorpresa cercando di fare in ogni situazione quello che sembra più ovvio, quello che ci si aspetta da Ruby.
Nel caso della terminazione di linea, Ruby consente l’uso di punti e virgola per separare le istruzioni, ma anche un ritorno a capo è un separatore valido, a meno che la linea non finisca con un operatore.
Ecco qualche esempio:

due assegnazioni

>> a = 3; b= 2 # due istruzioni 
=> 2

un’assegnazione spezzata su più righe

>> a = 
?> 3
=> 3

un’espressione con dei ritorni a capo

>> z = 4 +
?> 5 +
?> 3
=> 12

un’espressione interrotta, con un commento all’interno

>> y = 3 + # un altro parametro
?> 2
=> 5