Astuce & Typage

Voir la vidéo
Description Sommaire

Avant d'aller plus loin, je vous propose de faire un petit point sur la notion de typage en Ruby. Comme on l'a vu depuis le début de cette formation, les différents éléments du langage Ruby sont des objets. Ces objets ont tous des méthodes et des propriétés différentes. Lorsque nous allons créer des méthodes, nous allons en général attendre en paramètres une variable d'un certain type. Aussi, afin d'éviter les problèmes lors de l'exécution de votre code il sera important de vérifier le type de la variable qui est passée en paramètre dans une méthode. En Ruby, contrairement à d'autres langages de programmation par exemple le Java, il n'est pas possible de préciser directement le type de variable attendue dans une méthode. Alors, comment faire ?

De manière générale on ne testera pas directement le type de variable attendue, mais plutôt la présence d'une méthode sur l'objet en question. Prenons un exemple concret pour mieux comprendre de quoi il s'agit :

def convert_to_min(seconds)
 seconds / 60
end

Pour que cette méthode fonctionne il faut que le paramètre seconde, soit un entier afin de pouvoir le diviser par 60.

def convert_to_min(seconds)
 seconds.to_i / 60
end

On pourra alors rajouter au début de nos méthodes des conditions afin de vérifier que l'élément passé en paramètres peut être converti en entier.

def convert_to_min(seconds)
 return 0 if !seconds.respond_to? :to_i
    seconds.to_i / 60
end

convert_to_min("3600") # 3600 sera converti en entier

La méthode respond_to permet de vérifier que la méthode existe sur l'objet en question. Si la méthode n'existe pas on pourra alors effectuer la logique que l'on souhaite (renvoyer zéro dans le cas précédent ou utiliser le système d'exception que l'on verra plus tard). Ceci étend dit si vous souhaitez vérifier directement le type de la variable vous pouvez utiliser la méthode is_a?

def convert_to_min(seconds)
 return 0 if !seconds.is_a Integer
    seconds / 60
end

convert_to_min("3600") # ne devient alors plus possible et renverra 0

Le problème, si on souhaite tester de manière stricte le type de nos variables et que l'on rend nos méthodes plus limitées en termes d'utilisation. Aussi, de manière générale, on préférera utiliser le respond_to en vérifiant si on peut, ou non, faire une conversion vers le type attendu.

Publié
Technologies utilisées
Auteur :
Grafikart
Partager