# Ruby/Méthodes

Dans ce chapitre, nous verrons ce que sont les fonctions, ou peut-être devrais-je dire les méthodes. Comme en Ruby tout est objet, toutes les fonctions sont des méthodes. Dans ce contexte, on peut donc considérer que ces deux termes sont interchangeables, ainsi je les utiliserai tous deux pour désigner la même chose. Pour les désigner, nous pouvons également utiliser le terme de sous-programme.

## Définition

Une méthode est un ensemble d'instructions réalisant une certaine tâche (par exemple : faire une addition, créer une fenêtre, etc.). La définition des méthodes débute par le mot-clé def et se clôt par un end.
Une fonction peut prendre des paramètres (ou arguments) lors de l'appel, nous le verrons à la fin du chapitre.
Elle peut également avoir une valeur de retour, mais ce n’est pas obligatoire.
Une fonction qui ne renvoie rien est appelée une procédure.

## Procédures

Pour comprendre, rien de mieux qu'un petit exemple, considérons une procédure qui dit "bonjour" et ne renvoie rien :
Cette procédure ne fait qu'un affichage. Pour l’utiliser (j'utiliserai à présent le terme d'appel de fonction / procédure / méthode), on se contente de :
L'appel est similaire à celui de puts ou print, que nous avons déjà utilisées. Une procédure peut contenir à peu près tout ce que vous voulez. Les procédures peuvent par exemple vous éviter de devoir réécrire plusieurs fois des blocs d'instructions identiques que vous appelez souvent : vous écrivez une fois la procédure et vous l'appellerez plusieurs fois.

## Fonctions avec valeur de retour

Ici aussi un exemple vous aidera à comprendre de suite. Nous allons considérer une fonction somme, effectuant la somme de deux entiers, mais comme nous n'avons pas encore approfondi le passage de paramètres, nous utiliserons des variables déclarées en dehors de la fonction :
Ce que vous devez remarquer dans ce code est le mot-clé return, celui-ci retourne une valeur et met fin à la fonction (si vous avez d'autres instructions après, elles ne seront pas exécutées). Ici somme retourne 4 + 5, soit 9. Cette valeur peut être récupérée lors de l'appel, dans notre exemple, nous l'utilisons avec puts pour faire un affichage, mais nous pouvons tout aussi bien faire :
Une telle fonction peut aussi être appelée comme une procédure, c'est-à-dire sans récupérer sa valeur de retour, mais avouez que l’intérêt est minime.
Une fonction ne peut renvoyer qu'une seule chose à la fois, mais cela peut être n’importe quoi : la fonction ne mentionne aucun type pour sa valeur de retour.

## Paramètres

Nous avons déjà vu avec puts et print que vous pouvez passer des arguments à vos fonctions.
Les arguments sont des paramètres qui peuvent influer sur le résultat de l'exécution de la fonction en question. Ils sont indiqués entre parenthèses (elles sont optionnelles), et sont séparés par des virgules.
Ainsi, on va pouvoir réécrire notre fonction somme de la sorte :
Si une fonction possède des arguments, ils doivent être précisés lors de l'appel :
Le nombre d'arguments lors de l'appel doit être le même que lors de la définition de la fonction.
Dans notre exemple, les variables désignées par x et y sont locales à la fonction : si leur nom était déjà utilisé pour des variables déclarées en dehors de la fonction, il est "masqué" par ces variables locales. Considérons par exemple :
Dans cet exemple, la variable locale x, contient la valeur 4 (obtenue lors de l'appel), et non 7.
| Opérateurs | Conditions |