home icon contact icon rss icon last FM icon facebook icon LinkedIn icon Delicious icon twitter icon

Archive pour le mot clé Ruby

Ils m'ont copiés ?

Quand on regarde le changelog de ruby 1.8.7_preview2, on peu lire ceci :

Mon Oct 15 21:57:07 2007  Akinori MUSHA  <knu@iDaemons.org>

* NEWS: Mention ipaddr enhancements.

* lib/ipaddr.rb (in_addr, in6_addr, addr_mask): Make some minor
  code optimization.

* lib/ipaddr.rb (<=>): Implement IPAddr#<=> and make IPAddr
  comparable.

* lib/ipaddr.rb (succ): Implement IPAddr#succ.  You can now create
  a range between two IPAddr's, which (Range) object is
  enumerable.

* lib/ipaddr.rb (to_range): A new method to create a Range object
  for the (network) address.

* lib/ipaddr.rb (coerce_other): Support type coercion and make &,
  |, == and include? accept a string or an integer instead of an
  IPAddr object as the argument.

* lib/ipaddr.rb (initialize): Give better error messages.

* lib/ipaddr.rb: Improve documentation.

Ce que je voulais vous montrer là dedans, c'est l'ajout des méthodes <=>, succ et to_range à la classe ruby IPAddr. Cela permet de rendre IPAddr comparable et énumérable. Cela permet aussi d'avoir un objet Range entre deux objets IPAddr. C'est tout neuf et ça vient de sortir. Ces méthodes n'étaient pas là avant.

Mon problème (enfin c'est pas un problème, ou alors ça ne regarde que moi), c'est que dans mon exercice fétiche de démo de ruby, ip_detector.rb, je faisais implémenter aux stagiaires ces méthodes. C'était pratique parce que ça permettait de démontrer par l'exemple des conceptes présent dans ruby :

  • l'extension de classe : on ajoute simplement des méthodes à une classe ruby quand on en a besoin et sans (trop) se poser de questions
  • le duke typing : juste en implémentant <=> et succ. Un objet est énumérable s'il possède les méthodes <=> et succ. On applique cela à IPAddr, alors IPAdrr est énumérable.
  • l'objet Range : grace la méthode to_range, on peut créer des ensembles d'IP. Utiliser les ensembles (fermés ou ouverts) est une notion qu'il faut voir en pratique pour bien assimiler.

Maintenant que cela est de base dans ruby, il va falloir que je trouve un autre exercice... :'(

Bon et puis il faut dire que Akinori MUSHA à bien implémenté ces méthodes puisqu'il prend bien en compte les familles d'adresses et qu'il retourne des clones des adresses en paramètre dans la méthode to_range. Ce que je ne faisais pas.