Skip to main content

Command Palette

Search for a command to run...

Les méthodes semi-prédicatives

Published
2 min read

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!