Semplici esempi

Scriviamo una funzione per calcolare i fattoriali.  Ladefinizione 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)  endend

Avrete sicuramente notato la ripetizione diend.  Ruby è stato definito"Algol-like" a causa di questo.  (Inrealtà, la sintassi di ruby imita quella di unlinguaggio chiamato Eiffel.) Avrete anche notato la mancanzadi una dichiarazione return.  Non ènecessaria perché una funzione ruby restituiscel'ultima cosa valutata in essa.  L'uso delladichiarazione return in questo caso èpermessa ma non necessaria.

Proviamo la nostra funzione fattoriale.  Aggiungendo unalinea 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 gliargomenti passati da riga di comando, e to_iconverte una stringa di caratteri in un intero.

% ruby fact.rb 11% ruby fact.rb 5120

Funzionerà con 40 come argomento? Le vostrecalcolatrici andrebbero in overflow...

% ruby fact.rb 40815915283247897734345611269596115894272000000000

Funziona.  Effettivamente ruby può operare conogni intero permesso dalla memoria della vostra macchina.Anche 400! può essere calcolato:

% ruby fact.rb 40064034522846623895262347970319503005850702583026002959458684445942802397169186831436278478647463264676294350575035856810848298162883517435228961988646802997937341654150838162426461942352307046244325015114448670890662773914918117331955996440709549671345290477020322434911210797593280795101545372667251627877890009349763765710326350331533965349868386831339352024373788157786791506311858702618270169819740062983025308591298346162272304558339520759611505302236086810433297255194852674432232438669948422404232599805551610635942376961399231917134063858996537970147827206606320217379472010321356624613809077942304597360699567595836096158715129913822286578579549361617654480453222007825818400848436415591229454275384803558374518022675900061399560145595206127211192918105032491008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

A prima vista non possiamo controllarne la correttezza, madovrebbe essere giusto. :-)

 

Input/evaluation loop

Quando lo chiamate senza argomenti, ruby legge i comandidallo standard input e li esegue al termine dell'input:

% rubyprint "hello world"print "good-bye world"^Dhello worldgood-bye world

Ruby viene distribuito con un programma chiamatoeval.rb che vi permette di inserire codice rubydalla tastiera in un ciclo interattivo, mostrandovi ilrisultato di volta in volta.  Lo useremo molto nel restodel tutorial.

Se avete un terminale compatibile ANSI (quasi certamenteè così se state usando un qualunque tipo diUNIX; sotto DOS dovete installare ANSI.SYS oANSI.COM), potete usare questoeval.rb migliorato che aggiunge assistenzavisiva all'indentazione, segnalazioni di warning, eevidenziamento tramite colori.  Altrimenti, guardatenella sottodirectory sample della vostradistribuzione ruby per una versione non-ANSI che funziona conogni terminale.  Di seguito c'è una brevesessione con eval.rb:

% ruby eval.rbruby> print "Hello, world."Hello, world.   nilruby> exit

hello world è prodotto daprint.  La riga successiva, in questo casonil, riporta l'ultima cosa valutata; rubynon fa distinzione tra dichiarazioni eespressioni, perciò valutare un pezzo dicodice fondamentalmente ha lo stesso significato cheeseguirlo.  Qui, nil indica cheprint 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 programmaeval.rb.



Ti potrebbe interessare anche

commenta la notizia