Semplici esempi
Scriviamo una funzione per calcolare i fattoriali. La
definizione matematica di n fattoriale è:
n! = 1 (quando n==0) = n * (n-1)! (negli altri casi)
In ruby, questo può essere scritto così:
def fact(n)
if n == 0
1
else
n * fact(n-1)
end
end
Avrete sicuramente notato la ripetizione di
end. Ruby è stato definito
"Algol-like" a causa di questo. (In
realtà, la sintassi di ruby imita quella di un
linguaggio chiamato Eiffel.) Avrete anche notato la mancanza
di una dichiarazione return. Non è
necessaria perché una funzione ruby restituisce
l'ultima cosa valutata in essa. L'uso della
dichiarazione return in questo caso è
permessa ma non necessaria.
Proviamo la nostra funzione fattoriale. Aggiungendo una linea di codice otterremo un programma funzionante:
# Programma per calcolare il fattoriale di un numero# Salvare come fact.rbdef fact(n) if n == 0 1 else n * fact(n-1) endendprint fact(ARGV[0].to_i), ""
Qui, ARGV è un array che contiene gli
argomenti passati da riga di comando, e to_i
converte una stringa di caratteri in un intero.
% ruby fact.rb 1 1 % ruby fact.rb 5 120
Funzionerà con 40 come argomento? Le vostre calcolatrici andrebbero in overflow...
% ruby fact.rb 40 815915283247897734345611269596115894272000000000
Funziona. Effettivamente ruby può operare con ogni intero permesso dalla memoria della vostra macchina. Anche 400! può essere calcolato:
% ruby fact.rb 400 64034522846623895262347970319503005850702583026002959458684 44594280239716918683143627847864746326467629435057503585681 08482981628835174352289619886468029979373416541508381624264 61942352307046244325015114448670890662773914918117331955996 44070954967134529047702032243491121079759328079510154537266 72516278778900093497637657103263503315339653498683868313393 52024373788157786791506311858702618270169819740062983025308 59129834616227230455833952075961150530223608681043329725519 48526744322324386699484224042325998055516106359423769613992 31917134063858996537970147827206606320217379472010321356624 61380907794230459736069956759583609615871512991382228657857 95493616176544804532220078258184008484364155912294542753848 03558374518022675900061399560145595206127211192918105032491 00800000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000
A prima vista non possiamo controllarne la correttezza, ma dovrebbe essere giusto. :-)
Input/evaluation loop
Quando lo chiamate senza argomenti, ruby legge i comandi dallo standard input e li esegue al termine dell'input:
% ruby print "hello world" print "good-bye world" ^D hello world good-bye world
Ruby viene distribuito con un programma chiamato
eval.rb che vi permette di inserire codice ruby
dalla tastiera in un ciclo interattivo, mostrandovi il
risultato di volta in volta. Lo useremo molto nel resto
del tutorial.
Se avete un terminale compatibile ANSI (quasi certamente
è così se state usando un qualunque tipo di
UNIX; sotto DOS dovete installare ANSI.SYS o
ANSI.COM), potete usare questo
eval.rb migliorato che aggiunge assistenza
visiva all'indentazione, segnalazioni di warning, e
evidenziamento tramite colori. Altrimenti, guardate
nella sottodirectory sample della vostra
distribuzione ruby per una versione non-ANSI che funziona con
ogni terminale. Di seguito c'è una breve
sessione con eval.rb:
% ruby eval.rb ruby> print "Hello, world." Hello, world. nil ruby> exit
hello world è prodotto da
print. La riga successiva, in questo caso
nil, riporta l'ultima cosa valutata; ruby
non fa distinzione tra dichiarazioni e
espressioni, perciò valutare un pezzo di
codice fondamentalmente ha lo stesso significato che
eseguirlo. Qui, nil indica che
print non restituisce nessun valore.
Possiamo uscire dal ciclo scrivendo exit,
sebbene vada bene anche ^D.
Dovunque in questa guida, "ruby>"
indica il prompt del nostro utile piccolo programma
eval.rb.
Ti potrebbe interessare anche
commenta la notizia
Chiedi alla nostra Redazione!