Ruby (linguaggio di programmazione)
Ruby linguaggio di programmazione | |
---|---|
![]() | |
Autore | Yukihiro Matsumoto |
Data di origine | 1995; 29 anni fa[1] |
Ultima versione | 3.3.0 (25 dicembre 2023)[2] |
Utilizzo | generico, scripting |
Paradigmi | orientato agli oggetti |
Tipizzazione | duck, dynamic |
Estensioni comuni | rb e rbw |
Influenzato da | Lisp, Smalltalk, Perl |
Implementazione di riferimento | |
Sistema operativo | Multipiattaforma |
Lingua | en |
Licenza | GNU General Public License |
Sito web | www.ruby-lang.org/it/ |
Modifica dati su Wikidata · Manuale |
Ruby è un linguaggio di programmazione interpretato open source completamente a oggetti. Nato nel 1995 come progetto personale del giapponese Yukihiro Matsumoto (spesso chiamato semplicemente Matz), prende spunto da altri linguaggi come Perl, SmallTalk, Eiffel, Ada e Lisp con lo scopo di bilanciare con cura i paradigmi di programmazione funzionale e imperativa[3].
Il successo di framework come Ruby on Rails ha aiutato la diffusione di Ruby soprattutto nello sviluppo di applicazioni web. Risulta attualmente nei primi dieci posti dei linguaggi maggiormente popolari e utilizzati nel mondo secondo vari indici di misurazione specifica, come per esempio TIOBE[4].
Sistemi operativi
L'interprete di Ruby è disponibile per i seguenti sistemi operativi:
- La maggior parte dei sistemi basati su Unix
- DOS
- Microsoft Windows 95/98/2000/2003/NT/XP/Vista/7/8/8.1/10
- macOS
- BeOS
- Amiga OS
- Acorn RISC OS
- OS/2
- Syllable
- PlayStation Portable
- Android
Potrebbero esistere port per altri sistemi operativi. Esiste inoltre JRuby, un'implementazione Java dell'interprete.
Caratteristiche principali
Ruby, pur essendo 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. Tuttavia a differenza dei linguaggi come C++ e derivati gli oggetti in Ruby sono qualcosa di molto più dinamico, in quanto è possibile aggiungere o modificare metodi in run-time. Perciò Il tipo di un oggetto 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: "se sembra un'anatra e fa il verso di un'anatra, dev'essere un'anatra"), 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), che consentono di sostituire i cicli espliciti, frequenti nei linguaggi a basso livello, con l'utilizzo di iteratori, celando all'esterno i meccanismi interni del ciclo in questione.
Esempi
Hello world
Il seguente esempio scrive sul terminale di output il testo "Hello world".
puts "Hello World"
Classi e metodi
Ecco un programma semanticamente identico al precedente, ma che si avvale del paradigma a 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
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
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 --
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
e =end
devono trovarsi all'inizio della riga, senza alcuna indentazione.
Note
- ^ ruby-lang.org, https://www.ruby-lang.org/en/about/ Titolo mancante per url
url
(aiuto). - ^ "Ruby 3.3.0 Released", su ruby-lang.org.
- ^ About Ruby, su ruby-lang.org. URL consultato il 27 luglio 2021.
- ^ index | TIOBE - The Software Quality Company, su tiobe.com. URL consultato il 27 luglio 2021.
Voci correlate
Altri progetti
Altri progetti
- Wikimedia Commons
Wikimedia Commons contiene immagini o altri file su Ruby
Collegamenti esterni
- (EN) Sito ufficiale, su ruby-lang.org.
- (EN) Opere riguardanti Ruby (Computer program language), su Open Library, Internet Archive.
- Ruby, su packages.debian.org.
- (EN) Ruby, su GitHub.
- Repository sorgenti di Ruby, su git.ruby-lang.org.
- (EN) Ruby, su Free Software Directory.
- (EN) Denis Howe, Ruby, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL
- "Imparare a Programmare" - Il celebre tutorial di Chris Pine per imparare a programmare in Ruby partendo da zero, tradotto in italiano, su corsidia.com.
- Guide, articoli di approfondimento, documentazione, faq e le risorse del forum, tutto dedicato a Ruby, Rails e sviluppo Web, su ruby.html.it.
- (EN) The little Book of Ruby Rapida introduzione al linguaggio
- (EN) Learning Ruby, su math.umd.edu. URL consultato il 19 settembre 2008 (archiviato dall'url originale il 5 dicembre 2008).
V · D · M | |
---|---|
C++ | CppCMS · Wt |
CLI | ASP.NET (Core · AJAX · Dynamic Data · MVC · Razor · Web Forms) · Blazor · DNN · BFC · MonoRail · OpenRasta · Umbraco · WebSharper |
ColdFusion | CFWheels · ColdBox Platform · ColdSpring · Fusebox · Model-Glue |
Common LISP | Caveman2 · CL-HTTP · Weblocks |
Haskell | Yesod · Snap |
Java | AppFuse · Flexive · Grails · GWT · ICEfaces · ItsNat · JavaServer Faces · JHipster · Jspx · JWt · OpenXava · Play · Remote Application Platform · RIFE · Seam · Sling · Spring · Stripes · Struts · Tapestry · Vaadin · Vert.x · WebWork · Wicket · WaveMaker · ZK |
JavaScript | Angular/AngularJS · Backbone.js · Chaplin.js · Closure · Dojo Toolkit · Ember.js · Express.js · Ext JS · jQuery · Knockout · Meteor · MooTools · Next.js · Node.js · OpenUI5 · Prototype · React · Rico · script.aculo.us · Sencha Touch · SproutCore · Svelte · Vue.js · Wakanda |
Perl | Catalyst · Dancer · Mason · Maypole · Mojolicious · WebGUI |
PHP | CakePHP · CodeIgniter · Drupal · Fat-Free · FuelPHP · Flow · Grav · Gyroscope · Horde · Joomla! · Kohana · Laravel · Li3 · Midgard · MODX · Nette · Phalcon · PHP-Fusion · Pop PHP · PRADO · ProcessWire · Qcodo · Silex · SilverStripe · Symfony · TYPO3 · WordPress · XOOPS · Yii · Zend Framework |
Python | BlueBream · CherryPy · Django · Flask · Grok · Nevow · Pyjs · Pylons · Pyramid · Quixote · TACTIC · Tornado · TurboGears · web2py · Webware · Zope 2 |
Ruby | Camping · Merb · Padrino · Ruby on Rails · Sinatra |
Scala | Lift · Play · Scalatra |
Smalltalk | AIDA/Web · Seaside |
Altri | Vibe.d (D) · Application Express (PL/SQL) · Grails (Groovy) · Kepler (Lua) · OpenACS (Tcl) · Phoenix (Elixir) · Ash (Elixir) · SproutCore (JavaScript-Ruby) · Yaws (Erlang) |
V · D · M | |
---|---|
ABAP · Ada · ALGOL · APL · Assembly · Awk · BASIC · C · C++ · C# · COBOL · Delphi · Eiffel · Fortran · F# · Haskell · IDL · Java · JavaScript · J# · Lisp · LOGO · Lua · ML · Objective-C · OCaml · Pascal · Perl · PHP · PL/I · PLaSM · Prolog · Python · Ruby · Rust · SAS · Scheme · sh · Simula · Smalltalk · SQL · Swift · Visual Basic |
Controllo di autorità | LCCN (EN) sh00000128 · GND (DE) 4653817-3 · BNE (ES) XX4424926 (data) · BNF (FR) cb144105976 (data) · J9U (EN, HE) 987007290697005171 |
---|
![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/12/Nuvola_apps_emacs.svg/25px-Nuvola_apps_emacs.svg.png)