Première nouvelle du jour : j’ai rajouté le moteur de recherche sur le site. Il était prévu de le rajouter un jour ou l’autre mais Nicolas l’ayant expressément demandé, je l’ai ajouté hier soir. D’ailleurs, vous verrez que le mot-clef que vous recherchez est “highlighté” dans l’extrait du post (whaou, trop bien).

Par la suite sachez que je vais rajouter :

  • une chronologie (une simple liste de posts, mais un ordre chronologique)
  • des archives (par mois sans doute)
  • des pages récapitulatives (d’ailleurs, demain, je fais un récap, pour prendre un peu de recul sur ce que j’ai appris)
  • des liens intéressants (blogs, doc, exemples…)

Tout ça arrive au fur et à mesure de mon apprentissage.

Throw and catch

Non il ne s’agit pas de base-ball, ni de catch, mais bel et bien d’un bloc bien utile en Ruby. Le mot catch ouvre un bloc de code (comme le fait def ou begin), il exécute le code à l’intérieur, mais si il rencontre un throw, hop! On sort du bloc (et on n’exécute pas le reste du code inclus dans le bloc.

class Eleve
  attr :nom
  def initialize(nom)
    @nom = nom
  end
end
moi = Eleve.new("JT")
antiseches = true
 
catch :busted do
  puts "Début de l'examen pour " + moi.nom + "."
  if antiseches==true
    puts moi.nom + " a été foutu dehors."
    throw :busted
  end
  puts "Bravo " + moi.nom + ". Diplôme reçu!"
end
→ Début de l'examen pour JT.
JT a été foutu dehors.

Je créer ma classe Eleve qui ne prend comme paramètre que le nom. Je crée l’objet “moi” qui est l’élève “JT”. Ensuite, j’établis l’objet “antiseches” à true.
Puis vient mon bloc de catch! Je l’ouvre en mettant catch suivi d’un mot-clé, en l’occurence “busted”, mais vous pouvez mettre n’importe quoi. La seule condition est que ce soit le même qui apparaisse après le throw plus loin. Puis je mets do parce que c’est un bloc de code.

Il faut faire attention à deux lignes :

  • première ligne : j’affiche la phrase “Début de l’examen” avec en variable moi.nom (j’ai mis “nom” en attribut dans ma classe, donc je l’appelle comme une méthode). Et ça affiche “JT”.
  • dernière ligne : j’affiche encore une phrase avec l’objet moi

Tiens, j’ai mis 2 puts. Pourtant, une seule des deux phrases est affichée à la fin. Que s’est-il passé entre-temps ?
Il y a ce bloc conditionnel. Si “antiseches” est sur true (et c’est le cas), alors j’affiche une phrase ET je sors du bloc catch parce que j’ai mis throw, suivi du même mot-clé qu’au départ :busted.
On voit alors que la phrase “Bravo ” + moi.nom + “. Diplôme reçu!” n’est pas exécutée parce qu’elle est dans le bloc catch. Et on est justement sorti de ce bloc.

Ces catch/throw permettent d’éviter l’exécution d’un code dans certains cas. On peut voir ça comme gérer une erreur. “Si y a ce problème, alors n’exécute pas ce bout de code.” C’est très pratique.

Demain, un petit récapitulatif avant le week-end. C’est surtout pour moi en fait. J’avance un peu sans me retourner et sans trop revenir sur ce que j’ai déjà vu. J’aimerais quand même m’assurer de bien comprendre les bases!