10 ragioni per imparare Ruby

Venerdì 5 Ottobre 2007 - 08:21

di Simone Carletti

Ruby

Partiamo con qualcosa di semplice ok? Cosa c’è di meglio di una top ten di motivi per imparare Ruby?

Non sono molto favorevole a questo tipo di post, così come trovo nella norma poco utili gli interventi “meglio questo o quello?”, ma le 10 Reasons to Learn Ruby pubblicate su H3RALD (grazie IronRuby) meritano una lettura.

Saltando le ovvietà, personalmente mi sento di essere totalmente d’accordo con #4 – Everything is an object, as it should be.

When I studied Java they taught me that everything is an object.
- “So 14 and 374346.678 are objects then?” - “No, silly, they are numbers!”
In Ruby, numbers, strings, Boolean values et al are objects. Really.

Il vantaggio non è solo concettuale ma anche pratico! Ridefinendo la classe object (sì, lo potete fare anche runtime) aggiungendo un nuovo metodo otterrete che qualsiasi oggetto disporrà del nuovo metodo, compresi Array, Hash, Numeri e Stringhe!

A proposito della ridefinizione delle classi: #6 – You can alter your environment in any way you like. Devo dire che è uno degli aspetti che più mi fa impazzire (in senso positivo) di Ruby.

Ad esempio, vi serve che ogni oggetto numero implementi una conversione Numero->Piedi?

class Numeric
  def feet
    self*3.2808399
  end
end

Ora, semplicemente potrete chiamare

5.feet #=> Returns 16.4041995

Inizialmente non ne concepivo l’utilità, lo ritenevo un aspetto potenzialmente insicuro. Ma devo dire che l’idea è eccellente per:

  1. Correggere bug di classi altrui senza modificare il codice delle classi. Mi viene in mente ad esempio quando integro in un programma una libreria esterna, spesso via SVN. Modificare il file originale significherebbe avere problemi in futuro con l’upgrade, spesso quindi mi ritrovo a dover creare wrapper per gestire metodi buggati. Con Ruby non più, posso ridefinire runtime il metodo buggato!
  2. Aggiungere funzionalità ad una classe senza dover creare classi parallele, vedi esempio seguente.

Per darvi un esempio del punto 2, l’altro giorno avevo il problema di dover ottenere il nome del metodo corrente. Mi piace utilizzare a fondo la metaprogrammazione quando possibile!

Purtroppo, Ruby 1.8 fornisce __FILE__ per ottenere il nome del file corrente ma non ha un corrispettivo __METHOD__.

Così, ecco che ho deciso di ridefinire l’oggetto più alto nella gerarchia implementando in Kernel quanto necessario.

module Kernel
    # non lo chiamo __METHOD__ perché sembra che Ruby 1.9
    # fornisca questa nuova caratteristica
    def this_method()
        caller[0]=~/`(.*?)'/
        $1
    end
end

# ora testiamolo
class Test
    def initialize()
    end

    def my_method()
        puts "Called method '#{this_method()}'"
    end
end

t = Test.new()
t.my_method()   #=> Called method 'my_method'

Comodo, vero? E voi, cosa aggiungereste a questa lista?

Tags:

Categoria: Ruby | Permalink

Commenti

1

Grazie mille per aver menzionato il mio articolo su questo blog!

Purtroppo anche se sono italiano (di Genova) preferisco scrivere in inglese, e devo dire che fa un certo effetto vedere un mio articolo in inglese citato su uno dei più autorevoli blog italiani in materia di programmazione.

Mi fa anche molto piacere vedere che Ruby si sta diffondendo anche in Italia e avrò presto (tra qualche settimana, spero) una bella sorpresa per tutti i programmatori italiani che vogliono imparare qualcosa di più su questo linguaggio.

Grazie ancora e… Stay tuned! ;-)

# - postato da Fabio Cevasco - 05 Ottobre 2007 - 11:11

2

Ciao Fabio,

rinnovo i complimenti per il post!
Caspita, non mi ero accordo l’autore fosse italiano. Ottimo, almeno un lettore questo post l’ha avuto! :D

Ci sono interessanti novità per Ruby in programmazione su questo blog, spero possano interessare te e gli altri utenti.

Stay tuned… you too! ;)

# - postato da Simone Carletti - 05 Ottobre 2007 - 11:26

3

In Ruby, numbers, strings, Boolean values et al are objects. Really.

Grande!!!

# - postato da Davide - 05 Ottobre 2007 - 14:32

4

Ora aspetto di installare ubuntu 7.10 sul portatile nuovo, poi mi butto su python e ruby..:D
Anche se python mi ispira di più onestamente

# - postato da lloyd27 - 05 Ottobre 2007 - 15:16

5

Aggiungerei anche che è relativamente semplice scrivere estensioni in C per estendere Ruby o per creare librerie che possano unire i vantaggi di due mondi (velocità di esecuzione ed eventualmente tanto codice già esistente uniti alla facilità, flessibilità e velocità di programmazione di Ruby).

BTW, per seguire uno stile più ruby-oriented io avrei scritto il metodo in questo modo:

module Kernel
    def this_method()
        $1 if caller.first =~ /`(.*?)'/
    end
end

# - postato da NRK - 05 Ottobre 2007 - 20:14

6

Su Sitepoint è possibile, ancora 56 giorni, scaricareun libro introduttivo su Ruby on Rails.

Il link è questo.

# - postato da Vinz - 05 Ottobre 2007 - 21:31

7

che poche cose sono keyword e quindi possno essere manipolate e se ne possono aggiungere di proprie estendendo il linguaggio verso il proprio dominio.

Ad esempio tra le prime cose che feci io quando imparai ruby c’era un metodo “logged” da usare come public/private per tenere traccia di certe operazioni, in totale dieci righe :)

# - postato da riffraff - 07 Ottobre 2007 - 21:35

8

Ciao ragazzi,
mi consigliate qualche risorsa per una persona che vorrebbe iniziare a destreggiarsi con Ruby ma parte da 0?

Grazie!

# - postato da Angelo - 08 Ottobre 2007 - 00:53

9

Ciao Angelo, trovi le guide introduttive a ruby anche su html.it. Dipende se vuoi imparare uby per sviluppare o per il web. Nel secondo caso trovi ad esempio ruby on rails chè è il piu usato. Comunque ruby è una cosa fantastica veramente

# - postato da Dibi Store - 08 Ottobre 2007 - 08:32

10

@ Angelo

Attendi un paio di giorni, ci saranno forti novità sul blog. ;)

# - postato da Simone Carletti - 08 Ottobre 2007 - 09:27

11

Guarda un po che coincidenza, ieri sera mi sono accorto che ormai Ruby on rails sta prendendo piede, sopratutto per le aziende, molte cercano figure cche sviluppano in RoR, allora mi sono detto, domani un bel libro per iniziare sull’argomento e viaaaa.
Continuate così!

# - postato da MrClog - 09 Ottobre 2007 - 08:28

Inserisci il tuo commento:





(puoi usare i seguenti tag HTML per formattare il testo -
a href, b, i, br/, p, strong, em, ul, ol, li, blockquote, pre):

 

Anteprima del commento