9. Les méthodes
Les méthodes regroupent une suite d'instructions, dans un bloc, qui est réutilisable à plusieurs endroits dans un programme. Chaque méthode décrit le comportement d'une fonctionnalité, on parle également de fonction, et une méthode peut appeler une autre méthode dans son corps.
Si dans ton programme, tu te retrouves à vouloir dupliquer du code, alors c'est certainement qu'une méthode serait adéquate. Pour rappel, il est important de ne pas faire de copier-coller !
Une méthode est donc une portion de programme réutilisable. Elle comporte 4 caractéristiques importantes :
- un corps : portion de programme réutilisable ou importante qui nécessaire la création d'une méthode
- un nom : comme l'identificateur d'une variable, le nom d'une méthode permet de la référencer
- des paramètres typés : ensemble de variables, qu'on appelle arguments, qui sont extérieures à la méthode et que son corps utilise
- les entrées
- un type : certaines méthodes peuvent retourner une valeur de retour au reste du programme, dans ce cas, la valeur de retour doit correspondre au type de la méthode
- les sorties
type nom(type1, paramètre1, type2, paramètre2, ...) {
corps
return valeur de retour
}
Une fois que la méthode est clairement définie, il est possible de l'appeler à tout moment dans le programme. Son appel et son exécution suit un ordre précis :
- les expressions passées en arguments sont évaluées
- les valeurs correspondantes sont affectées aux paramètres
- le corps de la méthode est exécuté
- l'expression de la valeur de retour est évaluée
- la valeur de retour est retournée comme réponse à l'appel de la méthode
On sort de la méthode lorsqu'on rencontre un
return
qui indique l'expression de la valeur de retour. Si une méthode contient plusieursreturn
(ça peut être le cas avec une branchement conditionnelif
), alors la méthode "s'arrête" au premierreturn rencontré
.La valeur de retour doit être de même type que la méthode, sinon une erreur sera générée et le programme s'arrête.
Exemple :
int sum(int x, int y) {
return x + y;
}
// ...
int z = sum(3, 5); // sum(3, 5) retourne 8, z vaut donc 8
Il existe le type
void
uniquement pour les méthodes qui n'ont pas de valeur de retour (pas dereturn
dans le corps de la méthode).
9.1 Passage des arguments
Nous avons vu qu'il y avait des types élémentaires ainsi que des types évolués, et que chaque argument de méthode est typé. Est-ce que l'argument passé à la méthode en paramètre peut être modifié au sein de la méthode ?
Type élémentaire | Type évolué | |
---|---|---|
Argument modifié ? | non ; passage par valeur | oui ; passage par référence |
Lorsqu'une argument est passé en paramètre, il s'agit en fait de copier la valeur d'une variable ou d'une expression. Si on reprend l'exemple ci-dessus, lorsque le programme lit sum(3, 5)
, il va copier la valeur de 3
et l'affecter à x
, de même pour y qui va recevoir la valeur copiée de 5
.
C'est pourquoi, dans le cas d'un argument de type élémentaire, la valeur de la variable initiale ne peut pas être modifiée, vu qu'une copie de sa valeur est fait.
Par contre, dans le cas d'un argument de type évolué, la situation est différente. Rappelle-toi qu'une variable de ce type ne contient pas directement la valeur mais une référence (adresse) à la valeur. C'est donc la référence qui sera copiée et affectée au paramètre.
Exemple :
String test(String param) {
param = "Bye";
// ...
}
// ...
String s2 = test(s); // s est passé en argument
Déroulement de cet exemple :
- la référence de
s
pointe vers"Hello"
- lorsque que la méthode
test
est appelée ets
est passé en argument, sa référence est alors copiée et affectée àparam
- la référence de
param
pointe également vers"Hello"
- dans le corps de la méthode,
param
modifie son contenu par"Bye"
- cette modification affecte aussi
s
puisque ques
etparam
pointent les deux vers la même case mémoire
9.2 Comment construire sa méthode
Pour définir efficacement une méthode, voici une marche à suivre :
- réfléchir à ce que fait la méthode et trouver un nom en fonction de son rôle
- quels arguments la méthode nécessitent pour ce qu'elle a à faire
- que va retourner la méthode
- et finalement, comment fonctionne la méthode et dans quel ordre