Category Archives: Ruby

I numeri in Ruby

Guida alla programmazione con Ruby

Ogni numero in Ruby rappresenta un oggetto, o più precisamente un’istanza di una delle classi numeriche di Ruby; a tal proposito la classe Numeric rappresenta la classe di base  per i numeri. In essa è possibile individuare poi la classe Fixnum che viene utilizzata per rappresentare i numeri interi di lunghezza fissa, che occupano un numero di bit non superiore a quello nativo relativo alla macchina in uso (ad esempio 32 bit per una macchina a 32 bit).

La classe Bignum viene utilizzata per rappresentare i numeri interi più grandi di quelli che possono essere contenuti nella classe Fixnum. Risulta opportuno precisare che la transizione tra le due classi avviene in modo del tutto automatico e cioè l’interprete Ruby, in base alle dimensioni del numero da rappresentare associa lo stesso alla classe opportuna.

Per comprendere meglio il significato di quanto detto analizziamo nel dettaglio un esempio; in particolare utilizzeremo un ciclo per moltiplicare un numero a se stesso in modo tale da aumentare progressivamente le dimensioni del numero, contestualmente poi stamperemo la classe con cui il numero viene rappresentato. Per fare questo utilizzeremo il codice seguente:

num = 2
for i in 1..8
   print i, “ “, num.class, " ", num, "\n"
   num *= num
end

dove il simbolo *= viene utilizzato appunto per moltiplicare il numero a se stesso ed assegnarli il risultato. Per visualizzare in tempo reale i risultati forniti dall’interprete ci serviremo del software irb che ci fornisce, come precedentemente già introdotto, una consolle interattiva dove digitare codice Ruby e vedere immediatamente i risultati.

irb(main):001:0> num = 2
=> 2
irb(main):002:0> for i in 1..8
irb(main):003:1> print i, " ", num.class, " ", num, "\n"
irb(main):004:1> num *= num
irb(main):005:1> end
1 Fixnum 2
2 Fixnum 4
3 Fixnum 16
4 Fixnum 256
5 Fixnum 65536
6 Bignum 4294967296
7 Bignum 18446744073709551616
8 Bignum 340282366920938463463374607431768211456
=> 1..8

Nell’esempio appena proposto è possibile verificare che fino alla quinta iterazione il numero è di dimensioni tali da farlo contenere nel range appartenente alla classe Fixnum, relativa alla macchina in uso; dalla sesta iterazione in poi il numero supera i bit nativi e l’interprete in modo automatico effettua la transizione alla classe Bignum.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Commenti in Ruby

Guida alla programmazione con Ruby

Al fine di rendere leggibile il codice, sarà possibile inserire delle righe di commento in Ruby, che precedute dal simbolo # (cancelletto), non saranno considerate dall’interprete  ma serviranno esclusivamente a spiegare lo scopo dell’istruzione.

È opportuno precisare che Ruby ci permette di inserire dei commenti in due differenti modi: il primo classico prevede l’inserimento del simbolo # (hash) all’inizio del commento, il codice inserito a partire da tale punto sarà ignorato dall’interprete. Esempi dell’utilizzo di tale procedura sono riportati di seguito:

# Questo è un commento
nome = “Luigi”   # Questo è un commento

Negli esempi precedenti abbiamo potuto verificare che un commento in Ruby può essere inserito anche nella stessa riga contenente del codice. Vediamo ora invece come procedere nel caso si volessero inserire dei commenti su più righe; in tal caso si può utilizzare ancora il simbolo # (hash):

# Primo commento 
# Secondo commento 
# Terzo commento

Oppure utilizzare il blocco commento utilizzando le parole chiave =begin ed =end:

=begin    
 Questo è    
 un commento    
 su più righe 
=end

È da notare che nei commenti in Ruby disposti su più righe, =begin ed =end devono trovarsi all’inizio della riga, senza alcuna indentazione.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Operatori logici in Ruby

Guida alla programmazione con Ruby

Gli operatori logici in Ruby combinatori sono operatori con uno o due operandi logici che forniscono un risultato di tipo logico. Gli operatori logici in Ruby sono riportati nella tabella successiva.

Operatore Tipo di Operazione
! Negazione logica
&& Congiunzione logica
|| Disgiunzione logica inclusiva

Se la relazione espressa dall’operatore è vera, l’operatore fornisce come risultato .TRUE. altrimenti .FALSE. Nella gerarchia delle precedenze vengono per ultimi.

Abbiamo detto che gli operatori logici si applicano ad operandi di tipo logico, allora vediamo di capire in base al valore assunto dagli operandi quale sia il risultato dell’espressione. Siano A e B due variabili di tipo logico, applichiamo ad esse gli operatori logici in Ruby:

  • !A – il risultato è .true. se A è .false. altrimenti è .false.
  • A && B – il risultato è .true. se A e B sono entrambi pari a .true. altrimenti è .false.
  • A || B – il risultato è .true. se almeno uno tra i valori di A o B assume il valore .true. altrimenti è .false.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Operatori relazionali in Ruby

Guida alla programmazione con Ruby

Gli operatori relazionali in RUBY operano su operandi numerici e di caratteri e forniscono come risultato un valore logico (vero o falso).

In un espressione logica in cui compare un operatore relazionale, gli operatori coinvolti vengono confrontati e dalla relazione tra di essi scaturisce il risultato. Gli operatori relazionali previsti dal Ruby sono elencati di seguito:

== Uguale
!= Non uguale
. < Minore
<= Minore o uguale
> Maggiore
>= Maggiore o uguale

Allora una tipica espressione logica che presenta un operatore relazionale assumerà la forma seguente:

var1 > var2
var1 < var2

 Se la relazione imposta dall’operatore su var1 e var2 risulta vera, allora il risultato sarà .TRUE. altrimenti sarà .FALSE.

Come riportato nella Tabella precedente l’operatore relazionale in Ruby di uguaglianza è rappresentato dal simbolo == (due segni di uguale); a differenza del simbolo =  (un solo segno di uguale) che invece viene adoperato per l’istruzione di assegnazione. Spesso, infatti, si commette l’errore di utilizzare il simbolo = per indicare l’operatore relazionale di uguaglianza.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Operatori aritmetici in Ruby

Guida alla programmazione con Ruby

Passiamo allora ad analizzare gli operatori aritmetici in Ruby; iniziamo con il considerare l’operatore di assegnazione che è rappresentato dal segno uguale (=). È opportuno ricordare che il suo utilizzo nella programmazione è diverso dal suo uso consueto in matematica, così se scriviamo:

 a = b

non vogliamo intendere “a è uguale a b”, mentre invece vogliamo significare “assegna il valore di b alla variabile a”. Allora in un’istruzione di assegnazione, la parte a destra del segno di uguale può essere una qualsiasi espressione, mentre la parte a sinistra deve essere necessariamente il nome di una variabile. Per tale motivo scriveremo:

 variabile = espressione

cosicchè durante l’esecuzione dell’istruzione viene valutata l’espressione ed il risultato viene assegnato alla variabile. Il tipo del dato rappresentato dalla variabile viene stabilito nella fase di inizializzazione, ne consegue che per avere una variabile che memorizzi numeri decimali dovremo scrivere:

 a = 1.0

sottolineando il fatto che nell’ipotesi di valore unitario per conservare il tipo numero decimale dovremo necessariamente aggiungere lo zero l’operatore decimale cioè il punto.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

I nomi in Ruby

Guida alla programmazione con Ruby

Per assegnare i nomi a variabili, costanti, etc. in ambiente Ruby è necessario seguire delle regole specifiche. In questo post appunto impareremo ad assegnare in modo corretto i nomi in Ruby.

Con il primo carattere Ruby individua il tipo di elemento che intende rappresentare; un nome allora può essere costituito da una lettera maiuscola, minuscola o dal simbolo underscore seguito da altri caratteri, che a loro volta possono essere una qualsiasi combinazione di lettere maiuscole e minuscole, underscore e cifre.

I caratteri minuscoli corrispondono alle lettere minuscole dell’alfabeto, dalla a alla z, compreso il simbolo underscore, mentre i caratteri maiuscoli corrispondono alle lettere maiuscole dell’alfabeto dalla A alla Z e le cifre da 0 al 9.

Vediamo allora degli esempi di nomi impostati correttamente in ambiente Ruby:

  • Contatore – corretto
  • luigi_2003 -corretto
  • simone_ciaburro – corretto
  • _2008 – Consentito ma sconsigliato
  • Luigi+ciaburro – Errato in quanto contiene il carattere +
  • when – Errato in quanto rappresenta una parola riservata
  • 2005_simone – Errato in quanto il primo carattere è una cifra

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Guida alla programmazione con Ruby

Guida alla programmazione con Ruby

Ruby rappresenta un linguaggio di scripting interpretato, per la programmazione orientata agli oggetti, dove il termine interpretato sta a significare che un’applicazione Ruby sarà eseguita senza che la stessa necessiti preventivamente di essere compilata. In questa guida vengono affrontati tutti gli argomenti necessari per iniziare a programmare in Ruby, in maniera semplice ed immediata partendo da zero. Ricca di esempi ed esercizi la guida ci aiuta nel percorso di apprendimento di un nuovo linguaggio di programmazione senza la necessità di competenze preventive sull’argomento.

Sommario
1. Introduzione
Le origini
Ruby Feature
Strumenti per programmare con Ruby
2. Per iniziare
Il software
Installazione
Installazione su Windows
Installazione su Linux
Installazione su Mac OS X
Primi passi con Ruby
Documentazione Ruby
Interactive Ruby
3. Nozioni di base di Ruby
I nomi in Ruby
Costanti e Variabili
Pseudovariabili
Variabili predefinite
Simboli
Gli operatori
Operatori aritmetici
Operatori relazionali
Operatori logici
Commenti
Numeri
4. Stringe ed espressioni regolari
Stringhe
Tempo e date
Espressioni regolari
5. Array ed Hash
Array
Manipolazione di un array
Operazioni sugli array
Metodi per gli array
Ranges
Hash
Hash multidimensionali
Metodi per gli hash
6. Strutture per il controllo del flusso
Il flusso delle informazioni
La struttura IF
Operatore condizionale
La struttura SELECT  CASE
Ciclo while
Ciclo until e unless
Ciclo FOR
Blocchi e iteratori
7. Classi, metodi, oggetti e moduli
La programmazione ad oggetti
Ereditarietà
Polimorfismo
Incapsulamento
Classi
Metodi
Gli oggetti
I Moduli
8. Operazioni di ingresso/uscita
Organizzazione dei dati in record
Metodi di accesso ai files
Directory e files
Proprietà di file e directory
Permessi su file e directory
Manipolare file e directory
Operazioni di lettura
Operazioni di scrittura
9. Gestione delle eccezioni
Le eccezioni
La gestione delle eccezioni
Debugging del codice
10. Database
Il database manager SQlite3
Costruzione di un database
Recupero dei dati
Le transazioni SQLite in Ruby
11. Creare delle GUI con Ruby
Pacchetti per la creazione di GUI
Introduzione a Tk
I Widget in Tk
Il widget TKFrame
Il widget TKButton
Il widget TKLabel
Il widget TKEntry
Il widget TkCheckButton
Il widget TkRadiobutton
Il widget TkListbox
Il widget TkComboBox
Il widget TkMenu
Il widget TkMenubutton
Il widget Tk.messageBox
Il widget TKScrollbar
Posizionamento dei widget
Gestione degli eventi
Il metodo configure

Scritto da un esperto professionista, questo manuale è contraddistinto da un approccio didattico semplice, accurato ed efficace per imparare a programmare in Ruby.

 

Interactive Ruby

Guida alla programmazione con Ruby

Interactive Ruby rappresenta una sorta di shell interactive alla quale è possibile digitare tutti i comandi Ruby che potranno in questo modo essere eseguiti immediatamente. Proviamo il suo funzionamento attraverso una serie di esempi. Dapprima utilizziamo Interactive Ruby come un semplice calcolatore eseguendo una serie di operazioni banali, i risultati sono riportati nella Figura seguente.

Interactive Ruby

Abbiamo in questo modo verificato la sintassi delle operazioni matematiche fondamentali. Passiamo ora a qualcosa di più complesso, si fa per dire: stamperemo a video la famosa scritta con la quale si introduce qualsiasi linguaggio di programmazione ovvero Hello World!. Per fare questo, in Interactive Ruby,  basterà definire un oggetto ed immagazzinare in esso la scritta; apriremo come sempre la console di Ruby e digiteremo al prompt le seguenti istruzioni:

C:\InstanRails\rails_apps>irb
irb(main):001:0> def saluto
irb(main):002:1> puts "Hello World!"
irb(main):003:1> end
=> nil
irb(main):004:0> saluto
Hello World!
=> nil
irb(main):005:0>

come è possibile verificare non abbiamo fatto altro che definire una nuova struttura in Interactive Ruby, attribuendo ad essa il nome saluto ed in seguito ne abbiamo richiamato il nome ottenendo il saluto voluto.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Documentazione su Ruby con Ri

Guida alla programmazione con RubyLa prima cosa di cui un programmatore alle prime armi si preoccupa è di reperire il maggior numero di documentazione su Ruby. Allora il modo più veloce di reperire documentazione su Ruby è consultare ri. Preoccupiamoci inzialmente di verificare se la documentazioen Rubyè stata installata correttamente sul nostro computer. A tal proposito ricordiamo che Ruby come componente aggiuntivo presenta ri che rappresenta un programma che contiene tutta la documentazione relativa agli oggetti quali metodi, classi, e funzioni. Potremo condurre tale verifica digitando:

ri puts

che fornisce un messaggio di errore in quanto mi ricorda che la mia richiesta è troppo generica e deve essere affinata per poter restituire delle informazioni dettagliate. Per specificare meglio di che metodo si tratti, utilizzeremo la convenzione di indicare il nome dei metodi attraverso la seguente notazione:

  • nomeclasse#nomemetodo – per i metodi di istanza;
  • nomeclasse::nomemetodo – per i metodi di classe.

Allora scriveremo:

ri Kerenel#puts

per ottenere informazioni sul metodo puts della classe Kernel.

In questo modo ricaveremo il seguente risultato:

C:\InstanRails\rails_apps>ri Kernel#puts
----------------------------------------------------Kernel#puts
     puts(obj, ...)    => nil
---------------------------------------------------------------
     Equivalent to
         $stdout.puts(obj, ...)

 Per ottenere una lista delle classi per le quali ri fornisce documentazione digitare:

 ri –c

si ottiene una lista molto lunga che può scorrere attraverso l’utilizzo del tasto enter.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Le variabili d’ambiente in Ruby

Guida alla programmazione con Ruby

Le variabili d’ambiente in Ruby sono utilizzate per memorizzare alcune impostazioni relative al funzionamento del sistema o delle applicazioni installate. Sono utilizzate in tutti i principali sistemi operativi  ed alcune di esse si rivelano particolarmente utili per interagire in modo semplice ed efficace con il personal computer. Rappresentano delle stringhe di caratteri che contengono informazioni quali percorsi di file, unità disco, o nomi di file. Esse possono essere utilizzate per controllare il comportamento di diversi programmi.

Una lista delle principali variabili d’ambiente utilizzate da Ruby è riportata di seguito:

  • RUBYOPT: già impostata in fase d’installazione permette di passare delle opzioni addizionali all’interprete.
  • RUBYPATH: fornisce la lista di directory nelle quali Ruby cercherà le applicazioni nell’ipotesi in cui risulti specificato il flag -S.
  • RUBYLIB: fornisce la lista di directory contenenti librerie aggiuntive.
  • RUBYSHELL: rappresenta il persorso della shell di sistema, che risulta però valido solo per piattaforme Windows e OS/2.

Le variabili d’ambiente in Ruby assumono le seguenti caratteristiche:

  1.  sono accessibili attraverso un’apposita API del sistema operativo;
  2. in fase di creazione di un nuovo processo, sono inizializzate con una copia dei valori provvisti dal processo padre; il comportamento predefinito è quello di usare una copia delle variabili d’ambiente del processo creante;
  3. un processo non può modificare direttamente le variabili d’ambiente di un altro processo, tuttavia esiste un ambiente di riferimento che i processi possono consultare e modificare, e che viene usato dalla shell grafica per inizializzare le variabili d’ambiente dei programmi che avvia.

LINK DI APPROFONDIMENTO PER L’ARGOMENTO:

Le opzioni di Ruby

Guida alla programmazione con Ruby

Il linguaggio di programmazione Ruby è un linguaggio interpretato, nel senso che non necessita di compilazione, ma nel momento in cui viene eseguito, l’interprete si occuperà di trasformare il codice in un linguaggio comprensibile alla macchina. Le opzioni di Ruby ci consentono quindi di utilizzare in maniera appropriata l’interprete in modo da non avere problemi in fase di esecuzione del codice sorgente.

Vediamo nel dettaglio solo alcune delle opzioni di Ruby disponibili:

  • -c: con l’utilizzo di tale opzione viene controllata la sintassi dello script, senza che lo stesso venga eseguito. Nel caso il controllo dia esito positivo viene notificato il messaggio “Syntax OK”.
  • -d, –debug: tale opzione deve essere utilizzata per il debug di un file, la variabile $DEBUG è impostata a “true”.
  • -v, –verbose: fornisce informazioni aggiuntive che vengono dirottate verso l’output; tra le altre vengono esplicitate la versione dell’interprete, dei warning (che rappresentano dei messaggi di avvertimento) in fase di compilazione.
  • -w: risulta simile all’opzione –v, vista in precedenza, ma in questo caso non fornisce la versione di Ruby; con tale opzione può essere omesso il nome del programma da linea di comando, cosicché viene letto dallo standard input.
  • -e comando: con tale opzione viene eseguito il comando fornito come argomento all’opzione.

Le opzioni di Ruby, sono visualizzabili attraverso l’opzione -help.

ruby -help

il risultato è riportato nella Figura seguente.

ruby

LINK DI APPROFONDIMENTO PER L’ARGOMENTO: