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

C'è 1 commento
Redazione
Ti interessano altri articoli su questo argomento?
Chiedi alla nostra Redazione!