À de nombreuses reprises dans les chapitres précédents nous avons utilisé des méthodes afin de demander à Ruby d'effectuer une certaine logique par exemple upcase
pour transformer une chaîne de caractères en majuscules. Nous allons voir maintenant comment créer nous-mêmes nos propres méthodes.
Une méthode se définit de la manière suivante :
# sans arguments
def nom_de_la_methode
# code ici
return "valeur"
end
# avec arguments
def nom_de_la_methode(argument1, argument2, argument3)
# code ici
end
Les méthodes permettent de stocker en mémoire une certaine logique que l'on pourra utiliser à plusieurs reprises dans la suite de notre code. Elles prennent en général des paramètres et retournent un résultat particulier. En Ruby, contrairement à d'autres langages de programmation, les méthodes retournent systématiquement une valeur. Pour indiquer que la méthode retourne un résultat, on utilisera le mot-clé return
, ce mot-clé a aussi pour effet d'arrêter l'exécution du code se situant à l'intérieur de notre méthode. Il est aussi important de noter que, si la méthode ne rencontre aucun return
, le résultat de la dernière ligne de code exécutée sera alors retourné.
Par exemple si on souhaite à de multiples reprise convertir un nombre de secondes en nombre de minutes on pourra se créer une méthode convert_to_min
def convert_to_min(secondes)
seconds / 60
end
puts convert_to_min(3600) # 60
Dans certains cas on souhaitera rendre certains des arguments de notre méthode optionnelle, dans ce cas-là il est possible de préciser une valeur par défaut à un argument en utilisant la syntaxe suivante :
def ma_method(argument_obligatoire, argument_optionnel = "valeur par défaut")
end
Il est aussi possible de créer une méthode qui prend un nombre non défini de paramètres, dans ce cas-là il faudra utiliser le système de splat. En mettant un symbole *
devant un paramètre on précise alors à Ruby que ce paramètre est un tableau contenant tous les paramètres passés à la méthode :
def liste(prefix, *noms)
noms.each do |nom|
puts "- #{prefix} #{nom}"
end
end
liste("Salut", 'Marc', 'Jean', 'Marion', 'Manon', 'Marine', 'Jonathan')
# noms aura donc la valeur ['Marc', 'Jean', 'Marion', 'Manon', 'Marine', 'Jonathan']
Il est aussi important de noter que l'on peut utiliser certains caractères spéciaux dans le nom de nos méthodes, comme le !
, Le ?
, ou encore le signe =
.
def ma_method?
end
- Le signe ? permet en général d'indiquer que la méthode retourne un booléen (vrai ou faux)
- Le signe ! permet d'indiquer que la méthode modifie l'objet sur lequel elle est appliquée (on parlera de programmation orientée objet dans les prochains chapitres)
- Le signe =permet d'indiquer que la méthode est un setter (on en parlera aussi plus tard)