TUTORIEL OUTILS 
Ruby : la syntaxe
Nouvelle exploration de ce langage très exotique, mais dont la popularité n'a de cesse de grimper. Méthodes objets, blocs et structures de contrôles sont abordés. (25/08/2005)
Objectif : nous plonger plus en avant dans les méandres du langage Ruby (lire notre article du 18/03/2005) en examinant des exemples plus complets, qui nécessiteront l'installation d'un compilateur, comme le RubyInstaller pour Windows. Les utilisateurs de Mac OS X 10.2 (disponible depuis août 2002) ont Ruby déjà installé sur leur machine.

Notre article précédent faisait un rapide survol de la syntaxe du langage, avec un court exemple. Nous allons aborder quelques autres aspects du fonctionnement de Ruby, montrant ainsi sa différence avec les autres langages, et par là même ses possibles qualités.

Syntaxe de base et méthodes Objet
Le créateur de Ruby a opéré un savant mélange de syntaxe classique et de nouveautés assez audacieuses, permettant au débutant de rapidement intégrer les bases du langage, pour ne subir les nouveautés qu'au moment de pousser plus loin. Ainsi, les grands classiques d'assignation et comparaison sont respectés :

nombre_de_lapins = 7
nombre_d_ephelants = 1
$nombre_d_animaux = nombre_de_lapins + nombre_d_ephelants  
# le $ signifie que la variable est globale
puts $nombre_d_animaux

puts 'rien de ' * 5 + 'rien du tout'  
# affiche "rien de rien de rien de rien de rien de rien du tout"


À l'instar d'autres langages orientés Objet récents, Ruby se targue d'être "tout objet". C'est effectivement le cas, en cela que tous les types comme les entiers ou le caractère, primitifs dans certains autres langages, sont aussi des objets à part entière, et disposent donc de leurs propres méthodes :

puts 3.14159265.round  # arrondi la valeur au plus proche entier
puts 41.next  # donne l'entier suivant (équivalent de 41+1)
puts "Ce lapin est sacrément rose, je trouve".length  # affiche 38

[ "un", "deux", "trois" ].reverse  
# inverse l'ordre du tableau : [ "trois", "deux", "un"]


d = Dir.new("/")  
# pointe vers le dossier courant grâce à new. Dir est une classe interne à Ruby pour les répertoires
d.each { |x| puts x }  
# affiche le contenu du dossier grâce à each


Il est par ailleurs très facile d'ajouter ses propres méthodes aux classes en Ruby, autant pour ses propres classes que celles définies en interne. Ainsi, on peut reprendre la classe Float directement :

class Float
  def jeMange
    "Vous ne voyez pas que je mange ?"
  end
end
puts 3.14159265.jeMange  
# affiche le chaîne "Vous ne voyez pas que je mange ?"


Blocs
L'exemple qui affiche le répertoire nous permet d'aborder les blocs en Ruby. Depuis l'avènement de C, les blocs sont le plus souvent définis par des { ... }, et Ruby de ne fait pas exception ici, sauf que les arguments pris en compte par le contenu du bloc sont passés à l'aide du sous-bloc | ... | . Ruby autorise également l'usage de blocs entourés de "do...end".

0.upto(10) { |i| print i, " " }  # les chiffres de 0 à 10

Cet exemple utilise la méthode Integer.upto pour parcourir les valeurs de 0 à 10. Ces valeurs sont transmises au bloc via |i|, et affichées avec print. Ce passage de méthode peut être comparé aux parenthèse d'un bloc plus classique. Plusieurs valeurs peuvent dont être passées : |i|, |x, y|, |client, tarif, annee|, ...

La syntaxe de Ruby est assez libre, et comme l'exemple précédent le montre, des fonctions peuvent tenir sur une seule ligne. D'autres manières d'écrire cet exemple sont :

0.upto(10) do |i| print i, " " end

0.upto(10) do |i|
  print i, " "
end

0.upto(10) {
  |i|
  print i, " "
  }


Il faut simplement noter que la forme { ... } a une plus haute précédence que do..end.

Structures de contrôle
Ruby profite des grands classiques, et en ajoute même en passant. if, while, for sont ainsi représentés :

if a == 'marvin' and b == 42
  # une action
else
  # une autre action
end

i =0
while i <= 10
  puts "i = " + i.to_s
  i+= 1
end

# for est en fait un foreach() réservé aux tableaux
t = [ "un", "deux", "trois" ]  
for x in t
  print  x + "\n"
end


  Forum

Réagissez dans les forums de JDN Développeurs

Enfin, Ruby ajoute deux structures pouvant se montrer utiles : unless et until. Chacune est respectivement l'inverse de if et while :

p = 5
unless p < 5  # "sauf si p est inférieur à 5"
  print p  # affiche 5
end

z=0
until z >= 10  # "jusqu'à ce que z est supérieur ou égal à 10"
  print z.to_s  # affiche les chiffres de 0 à 9
  z+=1
end
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages