Accueil > Programmer avec Java >
{}
qui suivent directement la signatures de la méthode. Les méthodes implémentées doivent toujours avoir un corps; la signature n’est jamais terminée avec un ;
.void
. Les autres ont un type de retour comme les variables et incluent une instruction return [valeur];
à la fin du bloc de code de la méthode.À la fin de cette leçon vous devrez être en mesure de :
Vous connaissez déjà quelques méthodes avec valeur de retour :
Scanner
- comme nextInt()
, nextDouble()
, nextLine()
Math
- comme Math.pow()
et Math.sqrt()
String
- comme length()
et toUpperCase()
Il y a quelques indices que ces méthodes retournent une valeur au programme appelant :
String name = scanner.nextLine();
Les méthodes sans valeur de retour ont le type de retour void
. Elles sont souvent utilisées pour des actions qui modifient directement l’état de la mémoire du programme ou qui font des sorties (comme afficher à l’écran ou enregistrer dans un fichier).
Ceux que vous connaissez le mieux sont les méthodes :
main
- qui ne retourne rien au système d’exploitation : sa fin est la fin du programmeprintln
, print
et printf
de System.out
- qui affichent des messages à la consoleIl y a quelques indices que ces méthodes ne retournent pas de valeur :
void
précède immédiatment le nom de la méthode dans la déclaration, p. ex. void main()
ou sa version plus standard public static void main(String[] args)
Avec la décomposition, on a vu que c’est souvent utile de diviser un programme complet et plus petits sous-problèmes. Chacun serait une (ou plusieurs) méthode(s). Il faut alors savoir comment les déclarer dans nos programmes.
L’exemple de la leçon précédente, dans MainClass.java
, montre comment déclarer les méthodes sans valeur de retour - comme void main()
et void welcome()
. C’est la même chose pour les méthodes avec valeur de retour, sauf qu’on remplace void
par le type de retour désiré. Le format général est alors :
1
2
3
[type de retour] [nom de la méthode]() {
// bloc de code
}
Les corps de méthode, les blocs de code entre les accolades {}
, seront différents selon si le type est void
(pas de valeur de retour) ou non.
Type : void
1
2
3
void [nom de la méthode]() {
// instructions
} // retour implicite à l'accolade fermante
ou
1
2
3
4
void [nom de la méthode]() {
// autres instructions
return; // retour explicite sans valeur de retour
}
Type : int
, double
, String
, etc.
1
2
3
4
[type de retour] [nom de la méthode]() {
// autres instructions
return [valeur]; // retour explicite où valeur est du type de retour
}
Le programme ci-dessous montre un exemple très simple (et banal) de deux méthodes avec valeur de retour.
Fichier :
BasicReturn.java
1
2
3
4
5
6
7
8
9
10
11
12
13
String getName() {
return "Dave3000";
}
int getMeaningOfLife() {
return 42;
}
void main() {
String name = getName();
System.out.println("Bonjour, je m'appelle " + name);
System.out.println("J'ai aussi un chiffre très important pour vous : " + getMeaningOfLife());
}
Remarquez qu’on a placé la méthode main
à la fin du fichier. C’est possible de le faire, et souvent très naturel de le faire si vous avez planifié les différents modules de votre programme avant de commencer. Les développeurs tendent à mettre la méthode main
soit au début, soit à la fin du fichier pour faciliter la lecture du programme.
String getName()
String
: retourne "Dave3000"
, un String
littéralmain
(ligne 10), on assigne la valeur retournée à la variable name
, qu’on affiche ensuite à la ligne 11.int getMeaningOfLife()
int
: retourne 42
, un int
littéralmain
(ligne 12), on affiche directement la valeur retournée sur cette même ligne. Notez que le nom de la méthode est tout de même suivi de parenthèses.void main()
void
: ne retourne rienreturn
)Ce qu’on a déjà appris sur les diagrammes de flux pour les méthodes s’applique, mais il faut maintenant :
Voici le diagramme de flux pour le programme BasicReturn.java
:
Le diagramme de flux nous aide à mieux voir la mécanique appel-retour. On voit quelque chose là qui n’est pas aussi apparent dans le code. Dans l’algorithme principal du diagramme de flux nous devons utiliser au moins deux instructions, soit :
Dans le code, tout ça se fait normalement sur la même ligne de code, en combinant plusieurs expressions (p. ex. : assignation et appel, affichage et appel) dans une seule instruction.
Notez aussi que l’appel précède toujours l’autre instruction dans le diagramme (comme durant l’exécution réelle du programme). Dans le code, ce n’est pas évident que ce soit le cas, car l’appel se trouve plus à gauche que l’autre instruction.
Peu importe si main
se trouve au début ou à la fin du fichier, on commence toujours le programme à main
. À part le déplacement de main
, il n’y a rien de nouveau dans le diagramme de séquence d’exécution, sauf que :
return
; l’accolade fermante est un return
implicite dans les autres cas.1
2
3
4
5
6
7
9
10 -> 1
10 <- 2
11
12 -> 5
12 <- 6
13
getName
1
10 -> 1
est l’appel
1
10 <- 2
est l’assignation de la valeur de retour à name
getMeaningOfLife
1
12 -> 5
est l’appel
1
12 <- 6
est l’affichage de la valeur de retour
Encore, pour ce diagramme on doit commencer à main
et regarder quelles méthodes il appelle.
La nouveauté est qu’avec des valeurs de retour, on inclut le type de retour dans le bloc de la méthode. Plusieurs styles sont possibles, mais deux qui sont cohérents avec ce que nous voyons sont :
[nom de la méthode]() -> [type de retour]
… la flèche est semblable à ce qu’on utilise dans le diagramme de séquence d’exécution[nom de la méthode]() : [type de retour]
… ce format ressemble à ce que vous voyez si vous ouvrez la panneau Structure
(Outline
en anglais) de VS Code.
Voici donc une version possible de ce diagramme. L’ajout des valeurs de retour nous indique que main
dépend des valeurs String
et int
produites par les deux méthodes qu’il appelle.
Travaillez dans le répertoire GitHub partagé par votre enseignant pour la pratique et les exercices
DeclaringMethods.java
qui respecte le diagramme de dépendances ci-dessous ainsi que les détails d’implémentation suivants :
showTheNumber
affiche la valeur retournée de getTheNumber
et ne retourne rien à main
makeItCaps
retourne une valeur en majuscules du texte retournée par getTheWords
. Cette valeur sera affichée par main
. Indice: utiliser la méthode toUpperCase()
pour changer la casse de lettres.Structure
de VS Code. Quelle est le type de retour des méthodes showTheNumber
et main
qui ne retournent rien au programme? Conservez la capture comme ./captures/declaringMethods_structure.png
./captures/declaringMethods.png
../diagrams/declaringMethods.drawio
pour le programme.