Ruby
Da Wikipedia, l'enciclopedia libera.
Ruby è un linguaggio di scripting completamente a oggetti. Nato nel 1993 come progetto personale del giapponese Yukihiro Matsumoto (spesso chiamato semplicemente Matz), Ruby è stato il primo linguaggio di programmazione sviluppato in Oriente a guadagnare abbastanza popolarità da superare la barriera linguistica che separa l'informatica nipponica da quella internazionale e ad essere usato anche in Occidente in progetti di rilievo.
Il linguaggio che ha maggiormente ispirato l'autore è lo Smalltalk[citazione necessaria], da cui Ruby ha tratto la maggior parte delle sue caratteristiche. A seguire ci sono il Lisp (ed in generale i linguaggi funzionali), da cui provengono le chiusure (blocchi o proc, in Ruby), e il Perl, per la sintassi e l'espressività.
Nell'implementazione corrente, Ruby è un linguaggio interpretato. L'interprete, scritto in C, è rilasciato con una licenza stile BSD, e si trova attualmente alla versione 1.8.6.
Negli ultimi anni la popolarità di Ruby ha subito una forte impennata, dovuta alla comparsa di framework di successo per lo sviluppo di applicazioni web, come Nitro e Ruby On Rails.
Indice |
[modifica] Sistemi operativi
L'interprete di Ruby è disponibile per i seguenti sistemi operativi:
- La maggior parte di sistemi basati su Unix, incluso Linux
- DOS
- Microsoft Windows 95/98/2000/2003/NT/XP
- Mac OS X
- BeOS
- Amiga
- Acorn RISC OS
- OS/2
- Syllable
Potrebbero esistere port per altri sistemi operativi. Esiste inoltre JRuby, un'implementazione Java dell'interprete.
[modifica] Caratteristiche principali
Ruby, pur essendo principalmente un linguaggio ad oggetti, presenta alcune caratteristiche tipiche dei paradigmi imperativo e funzionale.
Il paradigma ad oggetti di Ruby è puro, come quello di Smalltalk, ossia ogni componente del linguaggio, dalle costanti numeriche alle classi, è un oggetto, e come tale può possedere metodi; a differenza dei linguaggi come C++ e derivati, tuttavia, gli oggetti in Ruby sono qualcosa di molto più dinamico, in quanto è possibile aggiungere o modificare metodi a run-time. Il tipo di un oggetto, perciò, non è definito tanto dalla classe che lo ha istanziato, quanto dall'insieme dei metodi che possiede, o, secondo la terminologia abitualmente utilizzata per i linguaggi stile Smalltalk, dei messaggi a cui sa rispondere.
In Ruby, dunque, è fondamentale il duck typing (dall'inglese if it looks like a duck, and quacks like a duck, it must be a duck), ovvero il principio secondo il quale il comportamento di una funzione sui suoi argomenti non deve essere determinato dal tipo di questi (come accade in C e altri linguaggi staticamente tipizzati), bensì da quali messaggi essi sono in grado di gestire.
Un'altra caratteristica fondamentale di Ruby è costituita dai cosiddetti blocchi, che sono sostanzialmente delle chiusure (ovvero funzioni dotate di ambiente), e che consentono di sostituire i cicli espliciti, frequenti nei linguaggi a basso livello, con l'utilizzo di iteratori, nascondendo così al chiamante i meccanismi interni del ciclo in questione.
[modifica] Esempi
[modifica] Hello world
Il seguente esempio stampa il testo "Hello world".
puts "Hello World"
[modifica] Classi e metodi
Ecco un programma semanticamente identico al precedente, ma che si avvale del paradigma ad oggetti di Ruby.
class Greeter attr_reader :recipient def initialize(recipient) @recipient = recipient end def greet puts "Hello #{recipient}" end end greeter = Greeter.new("world") greeter.greet
[modifica] Duck typing
La funzione definita qui di seguito agisce diversamente a seconda dei messaggi a cui il suo argomento risponde.
def text_of(widget) if widget.respond_to? :caption widget.caption elsif widget.respond_to? :text widget.text else raise "no text associated to widget #{widget}" end end
[modifica] Blocchi e iteratori
I cicli in Ruby sono generalmente eseguiti mediante iteratori, a cui viene passato un blocco, sotto forma di codice compreso fra le parole chiave do e end, come illustrato nel seguente esempio,
5.times do puts "Hello world" end
in cui il metodo times dell'oggetto "numero 5" si preoccupa di eseguire il giusto numero di volte (5, per l'appunto) il codice indicato.
Nella definizione di un iteratore, si usa la parola chiave yield.
class Integer def times_header_and_footer puts "-- BEGIN --" times do yield end puts "-- END --" end end 5.times_header_and_footer do puts "Hello world" end
Si noti come la classe Integer (una classe predefinita) sia stata riaperta per l'aggiunta di un metodo. L'output dello script è
-- BEGIN -- Hello world Hello world Hello world Hello world Hello world -- END --
[modifica] Commenti
Commenti su riga singola o su più righe
# Questo è un commento =begin Questo è un commento su più righe =end
Notare che nei commenti disposti su più righe, =begin ed =end devono trovarsi all'inizio della riga, senza alcuna indentazione.
[modifica] Voci correlate
[modifica] Collegamenti esterni
- (IT) Blog in costante aggiornamento sul mondo ruby e rails
- La comunità italiana degli sviluppatori Ruby
- Guide, articoli di approfondimento, documentazione, faq e le risorse del forum, tutto dedicato a Ruby, Rails e sviluppo Web
- Guida completa in italiano a Ruby
- Guida completa in italiano a Ruby on Rails
- Esempi per imparare Ruby
- Sito del progetto Ruby-Gnome
- The Ruby Mine - Una miniera di articoli su Ruby e su Rails fatta da italiani per italiani
- (EN) http://www.ruby-lang.org/
- (EN) http://rubyforge.org/
- (EN) http://tryruby.hobix.com/
- (EN) Full Ruby on Rails Tutorial
Principali linguaggi di programmazione (tutti) |
Ada | ALGOL | APL | Awk | BASIC | C | C++ | C# | COBOL | Delphi | Eiffel | Fortran | Haskell | IDL | Java | JavaScript | J# | Lisp | LOGO | ML | Objective C | O'Caml | Pascal | Perl | PHP | PL/I | PLaSM | Prolog | Python | Ruby | SAS | Scheme | sh | Simula | Smalltalk | SQL | Transact-SQL | Visual Basic |
- Portale Informatica: accedi alle voci di Wikipedia che parlano di informatica