Les méthodes semi-prédicatives
On appelle dans les différents langages « prédicats » les méthodes qui retournent soit true soit false. dans la beau du langage Ruby, elles sont reconnaissables au fait de porter un point d’interrogation à la fin de leur nom.
def est_que_tu_vas_bien?
if oui
return true
else
return false
end
end
Notons quand même que ce “?” est purement conventionnel, qu’il n’a rien d’obligatoire et aussi qu’on pourrait tout à fait utiliser le point d’interrogation pour une tout autre chose.
Mais souvent, dans mes programmes, j’ai besoin de ce que j’appelle une méthode semi-prédicative. Au lieu de renvoyer true ou false, elle retourne true ou le message d’erreur qu’elle a rencontré. Ça me permet de faciliter les évaluations.
Une (autre) beauté de Ruby est de laisser la possibilité d’utiliser n’importe quel caractère UTF8 dans les noms de méthode.
Pour reconnaitre ces méthodes semi-prédicatives, pour ne pas les confondre avec les prédicats, j’utilise tout simplement le point d’interrogation inversé utilisé par les espagnols en début de question :
def te_sens_tu_bien¿(value)
case
when value > 30 then true
when value < 5 then "oh que non !"
when value < 10 then "moyen moyen"
when value < 20 then "coussi-coussa"
else then "ça pourrait aller mieux"
end
end
De cette manière, je peux vérifier en utilisant cette méthode, en sachant qu’elle retourne true ou le problème qui se pose.
rang = 32
evaluations = [
te_sens_tu_bien¿(rang),
autre_eval¿(rang),
et_puis_encore_ça¿(rang)
]
.reject {|e| e === true }
.join("\n")
# => affiche la liste des erreurs ou des raisons
Magic Ruby!