Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

Sintassi alternative in Ruby

Articolo scritto da Claudio Garau

Un dei grandi vantaggi di un linguaggio semplice e potente come Ruby sta nella possibilità di ottenere uno stesso risultato in modi differenti, sfruttando cioè diversi costrutti sintattici per stampare il medesimo output o per generare comportamenti equivalenti.

In questa breve articolo presenteremo un semplice esempio basato sui cicli e non solo, il risultato desiderato è quello di creare un semplice programmino in grado di stampare tutti i numeri presenti all'interno di un range compreso tra "1" e "10".

(L'articolo continua più sotto...)

Una soluzione come la seguente:

puts 1,2,3,4,5,6,7,8,9,10
sembrerebbe a prima vista molto comoda, ma se il nostro range, fosse ben più ampio (mettiamo compreso tra "1" e "100") dovremmo ricrederci; quello che stiamo cercando è uno script che necessiti solo di 2 parametri: i valori iniziale e finale (minimo e massimo) che delimitano il range.
In questo modo il codice utilizzato potrà essere impiegato nuovamente anche per la generazione di output molto "ingombranti".

Il costrutto each do ci pemette di incrementare un valore iniziale fino al raggiungimento di un valore di terminazione passato come argomento al costrutto; vediamo un esempio:

(1..10).each do |i|
  puts i
end
Quindi per ogni (each) valore compreso nel range verrà stampata la cifra corrispondente fino al raggiungimento di un valore pari a quello stabilito nella condizione fissata dal secondo parametro (nel nostro caso "10").
Le due barre verticali che racchiudono la variabile d'incremento ("|i|") vengono utilizzate per delimitare la variabile stessa all'interno del ciclo isolandola dal resto del codice in quanto rappresenta un valore "a sé stante".

Lo stesso risultato potrebbe essere ottenuto variando leggermanete la sintassi utilizzata e "risparmiando" sulla quantità di codice da digitare:

(1..10).each { |i| puts i }
Il valore di ritorno sarà quindi restituito tramite l'esecuzione di un'istruzione ("{ |i| puts i }") ripetuta per ogni vaolore del range sulla base dei due parametri che ne delimitano l'esecuzione.

Un'alternativa potrebbe essere basata sull'utilizzo del ciclo for, come nell'esempio seguente:

for i in (1..10)
  puts i
end
Anche in questo caso abbiamo passato al ciclo 2 parametri che delimitano il range dei valori che la variabile "i" può assumere incrementandosi durante le 10 iterazioni necessarie, dove il valore "10" rappresenta la condizione che termina l'esecuzione del ciclo.

Ma le nostre alternative non sono finite, passiamo ora ad analizzare questa semplice stringa di codice:

1.upto(10) { |i| puts i }
upto è un metodo per gli oggetti che che rapprentano tipi numerici; la sintassi di questo metodo è alternativa a quella di "for"; scrivere "x.upto(y)" è infatti equivalente a digitare "for (i=x; x<=y; i++) { ... }".
In pratica con "upto" possiamo ottenere lo stesso risultato di un ciclo senza dover ricorrere necessariamente ad un loop, ne risulta sia un risparmio in termini di digitazione di codice che di risorse messe a disposizione dal sistema per l'esecuzione di un'istruzione.

Vediamo ora un ultimo esempio:

puts *(1..10)
L'ultima stringa di codice proposta è senza dubbio la più semplice tra tutte quelle viste sino ad ora; il semplice utilizzo del simbolo "*" consente di stampare tutti i valori compresi all'interno del range passato come argomento allo statement puts senza dover ricorrere ad alcun ciclo o dover specificare la chiamata di alcun metodo.

Corsi
Corso Ruby e Ruby On RailsCorso Ruby e Ruby On Rails
Creare software ed applicazioni Web con Ruby e ROR. A partire da 49 €.
Vedi anche...
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122