CINXE.COM
A proposito di Ruby
<!DOCTYPE html> <html> <head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://www.ruby-lang.org/it/about/","20240525193340","https://web.archive.org/","web","/_static/", "1716665620"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <meta charset="utf-8"> <title>A proposito di Ruby</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta itemprop="image" content="https://web.archive.org/web/20240525193340im_/https://www.ruby-lang.org/images/header-ruby-logo@2x.png"> <meta name="description" content=""> <link rel="stylesheet" type="text/css" href="/web/20240525193340cs_/https://www.ruby-lang.org/stylesheets/normalize.css"> <link rel="stylesheet" type="text/css" href="/web/20240525193340cs_/https://www.ruby-lang.org/stylesheets/main.css"> <link rel="stylesheet" type="text/css" href="/web/20240525193340cs_/https://www.ruby-lang.org/stylesheets/pygments.css"> <link rel="stylesheet" type="text/css" href="/web/20240525193340cs_/https://www.ruby-lang.org/stylesheets/mobile.css"> <link rel="stylesheet" type="text/css" href="/web/20240525193340cs_/https://www.ruby-lang.org/stylesheets/print.css"> <link href="https://web.archive.org/web/20240525193340cs_/https://fonts.googleapis.com/css?family=Noto+Sans:400,700,400italic,700italic&subset=latin,cyrillic,greek,vietnamese" rel="stylesheet" type="text/css"> <link rel="canonical" href="https://web.archive.org/web/20240525193340/https://www.ruby-lang.org/it/about/"> <link rel="shortcut icon" type="image/x-icon" href="/web/20240525193340im_/https://www.ruby-lang.org/favicon.ico"> <link href="/web/20240525193340/https://www.ruby-lang.org/it/feeds/news.rss" rel="alternate" title="Ultime Notizie (RSS)" type="application/rss+xml"> <script type="text/javascript" src="/web/20240525193340js_/https://www.ruby-lang.org/javascripts/jquery.min.js"></script> <script type="text/javascript" src="/web/20240525193340js_/https://www.ruby-lang.org/javascripts/page.js"></script> </head> <body> <div id="header"> <div id="header_content" class="container"> <a href="/web/20240525193340/https://www.ruby-lang.org/it/"> <h1>Ruby</h1> <h2>Il migliore amico dei programmatori</h2> </a> <div class="site-links"> <a href="/web/20240525193340/https://www.ruby-lang.org/it/" class="home">Home</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/downloads/">Scarica</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/documentation/">Documentazione</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/libraries/">Librerie</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/community/">Comunità</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/news/">Notizie</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/security/">Sicurezza</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/about/">A proposito di Ruby</a> <a href="#" class="menu selected">Menu</a> </div> <div id="search-box"> <form id="search-form" action="https://web.archive.org/web/20240525193340/https://www.google.com/cse"> <table class="fieldset"> <tr> <td> <input class="field" type="text" name="q" size="31" style="background: white url(//web.archive.org/web/20240525193340im_/https://www.google.com/coop/intl/it/images/google_custom_search_watermark.gif) left no-repeat" onfocus="this.style.background='white'" onblur="if (/^\s*$/.test(this.value)) this.style.background='white url(//www.google.com/coop/intl/it/images/google_custom_search_watermark.gif) left no-repeat'"/> </td> <td> <input type="hidden" name="cx" value="013598269713424429640:g5orptiw95w"/> <input type="hidden" name="ie" value="UTF-8"/> <input class="button" type="submit" name="sa" value="Cerca"/> </td> </tr> </table> </form> </div> </div> </div> <div id="page"> <div id="main-wrapper" class="container"> <div id="main"> <div id="content-wrapper"> <h1>A proposito di Ruby</h1> <div id="content"> <p class="summary">Ti stai chiedendo perché Ruby sia così popolare? I suoi fan lo chiamano “un linguaggio pulito ed elegante”, e tuttavia dicono che è pratico e funzionale. Come mai?</p> <h3>Gli ideali del creatore di Ruby</h3> <p>Ruby è un linguaggio di equilibrio e armonia. Il suo creatore, <a href="https://web.archive.org/web/20240525193340/http://www.rubyist.net/~matz/">Yukihiro “Matz” Matsumoto</a>, ha fuso insieme parti dei suoi linguaggi di programmazione preferiti (Perl, Smalltalk, Eiffel, Ada e Lisp) per creare un nuovo linguaggio in grado di bilanciare programmazione funzionale con programmazione imperativa.</p> <p>Lui stesso ha detto più volte che sta continuamente “provando a rendere Ruby naturale, non semplice”, in un modo che rispecchia la vita.</p> <p>Chiarificando questo concetto, Matz aggiunge:</p> <blockquote> <p>Ruby è apparentemente semplice, ma al suo interno è molto complesso, proprio come il corpo umano<sup><a href="#fn1">1</a></sup>.</p> </blockquote> <h3>Riguardo alla crescita di Ruby</h3> <p>Fin dalla prima release pubblica, nel 1995, Ruby ha attirato sviluppatori appassionati da tutto il mondo. Nel 2006 Ruby è stato universalmente accettato, con attivi gruppi di discussione formatisi nelle maggiori città del mondo e conferenze a tema capaci di fare il tutto esaurito.</p> <p>Ruby-Talk, la prima <a href="/web/20240525193340/https://www.ruby-lang.org/it/community/mailing-lists/">lista di discussione</a> del linguaggio Ruby, ha raggiunto il traguardo di 200 nuovi messaggi al giorno.</p> <p><a href="https://web.archive.org/web/20240525193340/http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">L’indice TIOBE</a>, che misura la crescita dei linguaggi di programmazione, mette Ruby al decimo posto tra tutti i linguaggi di programmazione esistenti al mondo. Gran parte di questa crescita è da attribuire alla popolarità dei programmi scritti in Ruby, in particolare il framework <a href="https://web.archive.org/web/20240525193340/http://rubyonrails.org/">Ruby on Rails</a>.</p> <p>Ruby è anche un linguaggio <a href="/web/20240525193340/https://www.ruby-lang.org/en/about/license.txt">libero e gratuito</a>. Non solo non costa nulla, ma può anche essere usato, copiato, modificato e distribuito liberamente.</p> <h3>Interpretare ogni cosa come un Oggetto</h3> <p>Inizialmente, Matz guardò ad altri linguaggi per trovare una sintassi ideale. Pensando a questa sua ricerca, ha detto lui stesso: “Volevo un linguaggio di scripting che fosse più potente di Perl, e allo stesso tempo più orientato agli oggetti di Python<sup><a href="#fn2">2</a></sup>.”</p> <p>In Ruby, ogni cosa è un oggetto: ogni parte di informazione e codice ha delle sue proprietà e azioni. La programmazione ad oggetti chiama le proprietà con il nome <em>variabili di istanza</em> e le azioni sono conosciute come <em>metodi</em>. L’approccio puramente orientato agli oggetti di Ruby è facilmente dimostrabile dalla seguente porzione di codice che applica un’azione ad un numero:</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="mi">5</span><span class="p">.</span><span class="nf">times</span> <span class="p">{</span> <span class="nb">print</span> <span class="s2">"Ruby è un linguaggio fantastico"</span> <span class="p">}</span></code></pre></figure> <p>In molti linguaggi, i numeri e gli altri tipi primitivi non sono oggetti, ma Ruby, seguendo l’esempio di Smalltalk, dà metodi e variabili di istanza a tutti i suoi tipi. Questo rende più facile l’utilizzo di Ruby, dal momento che tutte le regole applicabili agli oggetti si applicano, di fatto, all’intero linguaggio.</p> <h3>La flessibilità di Ruby</h3> <p>Ruby è visto come un linguaggio flessibile, dal momento che permette agli utenti di alterare liberamente le sue parti, che possono essere rimosse o ridefinite a discrezione dell’utente stesso: Ruby cerca di non dare troppi limiti agli sviluppatori. Per esempio, la somma è eseguita mediante l’operatore <code class="language-plaintext highlighter-rouge">+</code>, ma se preferisci usare la parola <code class="language-plaintext highlighter-rouge">aggiungere</code>, puoi creare tale metodo aggiungendolo alla stessa classe <code class="language-plaintext highlighter-rouge">Numeric</code>, che è predefinita, così:</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">class</span> <span class="nc">Numeric</span> <span class="k">def</span> <span class="nf">aggiungi</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="nb">self</span><span class="p">.</span><span class="nf">+</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">end</span> <span class="k">end</span> <span class="n">y</span> <span class="o">=</span> <span class="mi">5</span><span class="p">.</span><span class="nf">aggiungi</span> <span class="mi">6</span> <span class="c1"># y è ora uguale a 11</span></code></pre></figure> <p>Gli operatori di Ruby non sono altro che un modo semplice per eseguire operazioni normalmente effettuate dai metodi, e possono essere ridefiniti.</p> <h3>I blocchi, una peculiarità veramente interessante</h3> <p>I <em>blocchi</em> sono una delle molteplici ragioni della flessibilità di questo linguaggio. Un programmatore può collegare una <em>closure</em> ad ogni metodo, descrivendo come quel metodo dovrebbe agire. La <em>closure</em> viene chiamata <em>blocco</em> ed è diventata una delle funzionalità più popolari per i nuovi arrivati a Ruby da altri linguaggi imperativi come PHP o Visual Basic.</p> <p>I blocchi sono stati ispirati dai linguaggi funzionali. Matz ha detto, “nelle <em>closures</em> ho voluto rispettare la cultura di Lisp<sup><a href="#fn3">3</a></sup>.”</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="n">motori_di_ricerca</span> <span class="o">=</span> <span class="sx">%w[Google Yahoo MSN]</span><span class="p">.</span><span class="nf">map</span> <span class="k">do</span> <span class="o">|</span><span class="n">sito</span><span class="o">|</span> <span class="s2">"http://www."</span> <span class="o">+</span> <span class="n">sito</span><span class="p">.</span><span class="nf">downcase</span> <span class="o">+</span> <span class="s2">".com"</span> <span class="k">end</span></code></pre></figure> <p>In questo pezzo di codice, il blocco è delimitato dal costrutto <code class="language-plaintext highlighter-rouge">do ... end</code>, e il metodo <code class="language-plaintext highlighter-rouge">map</code> applica il codice del blocco alla lista di parole specificata. Molti altri metodi in Ruby danno spazio allo sviluppatore per creare i propri blocchi in modo da definire le operazioni che quel metodo deve eseguire.</p> <h3>Ruby e “miscugli”</h3> <p>A differenza di molti altri linguaggi ad oggetti Ruby ha solamente l’ereditarietà singola, <strong>volontariamente</strong>. Tuttavia, Ruby dispone del concetto di “modulo” (chiamato Categoria nell’Objective-C), ovvero un raggruppamento di metodi.</p> <p>In Ruby è possibile utilizzare i moduli per creare dei “miscugli” (mixins): le classi possono infatti includere al loro interno un modulo ed ereditare tutti i suoi metodi, automaticamente. Per esempio, qualsiasi classe che implementa il metodo <code class="language-plaintext highlighter-rouge">each</code> può includere il modulo <code class="language-plaintext highlighter-rouge">Enumerable</code> per ottenere una serie di metodi utili che usano il metodo <code class="language-plaintext highlighter-rouge">each</code> per le iterazioni.</p> <figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">class</span> <span class="nc">IlMioArray</span> <span class="kp">include</span> <span class="no">Enumerable</span> <span class="k">end</span></code></pre></figure> <p>Generalmente gli appassionati di Ruby vedono questa pratica come molto più pulita e gestibile dell’eredità multipla, che è complessa e può essere troppo restrittiva.</p> <h3>L’aspetto di Ruby</h3> <p>Sebbene Ruby limiti il più possibile la punteggiatura a favore di parole chiave in lingua inglese, certi segni di interpunzione sono usati per “decorare” il linguaggio. Ruby non ha bisogno di dichiarazioni di variabili, perché usa convenzioni particolari per denotare la visibilità delle variabili:</p> <ul> <li><code class="language-plaintext highlighter-rouge">var</code> potrebbe essere una variabile locale.</li> <li><code class="language-plaintext highlighter-rouge">@var</code> è una variabile di istanza.</li> <li><code class="language-plaintext highlighter-rouge">$var</code> è una variabile globale.</li> </ul> <p>Questi marcatori rendono il linguaggio più leggibile dando la possibilità al programmatore di identificare a colpo d’occhio il ruolo di ogni variabile. In questo modo, anche l’uso della parola chiave <code class="language-plaintext highlighter-rouge">self</code> da prependere a ogni membro di istanza diventa superfluo.</p> <h3>Funzionalità avanzate</h3> <p>Ruby è in grado di offrire una marea di altre funzionalità, tra cui:</p> <ul> <li> <p>la gestione delle eccezioni, proprio come Java o Python, per rendere la gestione degli errori più semplice.</p> </li> <li> <p>Ruby ha un vero Garbage collector mark-and-sweep per tutti gli oggetti. Come dice Matz: “Molto meglio per la tua salute!”</p> </li> <li> <p>Scrivere estensioni in linguaggio C per Ruby è più facile che scriverle per Perl o Python, grazie a un’API molto elegante per accedere a Ruby da C. Tale API ha chiamate per includere Ruby in programmi, in modo da usarlo come linguaggio di scripting. È disponibile anche un’interfaccia SWIG.</p> </li> <li> <p>Ruby è in grado di caricare dinamicamente delle librerie di estensione, se il sistema operativo lo permette.</p> </li> <li> <p>Ruby offre funzionalità di threading indipendenti dal sistema operativo. In questo modo si può avere multithreading su tutte le piattaforme in grado di eseguire Ruby, indipendentemente dal fatto che il sistema operativo lo supporti o meno, anche in DOS!</p> </li> <li> <p>Ruby è altamente portatile: è sviluppato principalmente su GNU/Linux, ma funziona su molte varianti di UNIX, macOS, Windows, DOS, BeOS, OS/2, ecc.</p> </li> </ul> <h3>Riferimenti</h3> <p id="fn1"><sup>1</sup> Matz, parlando nella lista di discussione “Ruby-Talk”, <a href="https://web.archive.org/web/20240525193340/https://blade.ruby-lang.org/ruby-talk/2773">May 12th, 2000</a>.</p> <p id="fn2"><sup>2</sup> Matz, in <a href="https://web.archive.org/web/20240525193340/http://www.linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html">Un’intervista con il creatore di Ruby</a>, Nov. 29th, 2001.</p> <p id="fn3"><sup>3</sup> Matz, in <a href="https://web.archive.org/web/20240525193340/http://www.artima.com/intv/closures2.html">Blocchi e <em>closure</em> in Ruby</a>, December 22nd, 2003.</p> </div> </div> <hr class="hidden-modern"/> <div id="sidebar-wrapper"> <div id="sidebar"> <div class="navigation"> <h3><strong>Per iniziare</strong>, è facile!</h3> <ul class="menu"> <li><a href="https://web.archive.org/web/20240525193340/https://try.ruby-lang.org/">Prova Ruby! (nel tuo browser)</a></li> <li><a href="/web/20240525193340/https://www.ruby-lang.org/it/documentation/quickstart/">Ruby in venti minuti</a></li> <li><a href="/web/20240525193340/https://www.ruby-lang.org/it/documentation/ruby-from-other-languages/">Ruby a partire da altri linguaggi</a></li> </ul> </div> <div class="navigation"> <h3><strong>Esplora</strong> un nuovo mondo…</h3> <ul class="menu"> <li><a href="/web/20240525193340/https://www.ruby-lang.org/it/documentation/">Documentazione</a></li> <li><a href="/web/20240525193340/https://www.ruby-lang.org/it/libraries/">Librerie</a></li> <li><a href="/web/20240525193340/https://www.ruby-lang.org/it/documentation/success-stories/">Esperienze Positive</a></li> </ul> </div> <div class="navigation"> <h3><strong>Partecipa</strong> ad una comunità amichevole e in crescita.</h3> <ul> <li><a href="/web/20240525193340/https://www.ruby-lang.org/it/community/mailing-lists/">Liste di Discussione</a>: Parla con altri programmatori Ruby da tutto il mondo.</li> <li><a href="/web/20240525193340/https://www.ruby-lang.org/it/community/user-groups/">Gruppi di Utenti</a>: Entra in contatto con "Rubysti" nella tua zona.</li> <li><a href="/web/20240525193340/https://www.ruby-lang.org/it/community/weblogs/">Blog</a>: Leggi cosa sta succedendo proprio adesso nella comunità di Ruby.</li> <li><a href="/web/20240525193340/https://www.ruby-lang.org/it/community/ruby-core/">Ruby Core</a>: Aiutaci a perfezionare l'ultimo Ruby.</li> <li><a href="https://web.archive.org/web/20240525193340/https://bugs.ruby-lang.org/">Issue Tracking</a>: Segnalaci o aiutaci a risolvere problemi in Ruby</li> </ul> </div> <h3>Feed RSS</h3> <p><a href="/web/20240525193340/https://www.ruby-lang.org/it/feeds/news.rss">Ultime Notizie (RSS)</a></p> </div> </div> <hr class="hidden-modern"/> </div> </div> </div> <div class="container"> <div id="footer"> <div class="site-links"> <a href="/web/20240525193340/https://www.ruby-lang.org/it/" class="home">Home</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/downloads/">Scarica</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/documentation/">Documentazione</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/libraries/">Librerie</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/community/">Comunità</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/news/">Notizie</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/security/">Sicurezza</a> <a href="/web/20240525193340/https://www.ruby-lang.org/it/about/">A proposito di Ruby</a> </div> <p> Questo sito in altre lingue: <a href="/web/20240525193340/https://www.ruby-lang.org/bg/">Български</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/de/">Deutsch</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/en/">English</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/es/">Español</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/fr/">Français</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/id/">Bahasa Indonesia</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/it/">Italiano</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/ja/">日本語</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/ko/">한국어</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/pl/">polski</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/pt/">Português</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/ru/">Русский</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/tr/">Türkçe</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/vi/">Tiếng Việt</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/zh_cn/">简体中文</a>, <a href="/web/20240525193340/https://www.ruby-lang.org/zh_tw/">繁體中文</a>. </p> <p><a href="/web/20240525193340/https://www.ruby-lang.org/it/about/website/">Questo sito web</a> è mantenuto con orgoglio dai membri della comunità Ruby.</p> </div> </div> </body> </html> <!-- FILE ARCHIVED ON 19:33:40 May 25, 2024 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 23:07:18 Dec 02, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.574 exclusion.robots: 0.03 exclusion.robots.policy: 0.019 esindex: 0.011 cdx.remote: 6.474 LoadShardBlock: 89.9 (3) PetaboxLoader3.datanode: 87.017 (4) PetaboxLoader3.resolve: 184.373 (2) load_resource: 223.383 -->