Accueil > Programmer avec Java >
Méthodes donnant une valeur de retour
Survol et attentes
Définitions
- Implémenter
- En programmation, ce terme veut dire âĂ©crire le code selon le plan pour le programmeâ. Avec les programmes modulaire, lâimplĂ©mentation se fait une mĂ©thode Ă la fois afin de tester que chaque morceau fonctionne correctement avant de passer au suivant.
- Déclaration de méthode
- signature spĂ©cifiant le type de retour, le nom, les paramĂštres et le bloc de code dâune fonction.
- Corps de méthode
- tout entre les accolades
{}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;. - Appel de mĂ©thode
- instruction qui utilise le nom de la mĂ©thode suivi par des parenthĂšses. Si la mĂ©thode retourne une valeur, on lâassigne souvent Ă une variable ou on lâutilise directement dans le reste de lâinstruction, comme un calcul ou un affichage. Si la mĂ©thode reçoit aussi de lâinformation, on passe ces valeurs entre les parenthĂšses.
- Valeur de retour
- valeur produit par une mĂ©thode et renvoyĂ©e au programme. Lâappel de mĂ©thode reprĂ©sente essentiellement cette valeur dans lâexpression oĂč lâappel est insĂ©rĂ©e, p. ex. un calcul ou une assignation. Dans Java, le type de retour est spĂ©cifiĂ© dans la dĂ©claration de la mĂ©thode devant le nom de la mĂ©thode. Les mĂ©thodes qui ne retournent rien ont le type de retour
void. Les autres ont un type de retour comme les variables et incluent une instructionreturn [valeur];à la fin du bloc de code de la méthode.
Objectifs dâapprentissage
Ă la fin de cette leçon vous devrez ĂȘtre en mesure de :
- Distinguer les méthodes qui retournent par défaut de celles qui retournent explicitement.
- Décrire ce qui se passe quand une méthode retourne, tant pour la méthode que pour le programme appelant, notamment quand la méthode retourne une valeur.
- Lire et tracer un diagramme de sĂ©quence dâexĂ©cution pour un programme qui inclut des mĂ©thodes avec valeur de retour.
CritĂšres de succĂšs
- Je peux implĂ©menter des mĂ©thodes avec valeur de retour dans mes programmes et reconnaĂźtre celles que jâutilise dĂ©jĂ .
Exemples connus de méthodes avec valeur de retour
Vous connaissez déjà quelques méthodes avec valeur de retour :
- celles pour la classe
Scanner- commenextInt(),nextDouble(),nextLine() - celles pour la classe
Math- commeMath.pow()etMath.sqrt() - celles pour la classe
String- commelength()ettoUpperCase()
Qu'est-ce que ces exemples ont tous en commun?
Réponse
Il y a quelques indices que ces méthodes retournent une valeur au programme appelant :
- On assigne souvent une variable du type approprié pour recevoir la valeur retournée, p. ex.
String name = scanner.nextLine(); - Les info-bulles de notre Ă©diteur nous montrent le type de retour de la mĂ©thode dans lâen-tĂȘte et dĂ©crivent la nature de la valeur retournĂ©e, p. ex. :

Exemples connus de méthodes sans valeur de retour
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,printetprintfdeSystem.out- qui affichent des messages Ă la console
Il y a quelques indices que ces méthodes ne retournent pas de valeur :
- On ne dĂ©clare aucune variable pour recevoir la valeur retournĂ© (car il nây en a pas)
- Le mot-clé
voidprécÚde immédiatment le nom de la méthode dans la déclaration, p. ex.void main()ou sa version plus standardpublic static void main(String[] args)
Ăcrire nos propres mĂ©thodes avec valeur de retour
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.
Signature de méthode
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 :
[type de retour] [nom de la méthode]() {
// bloc de code
}
Corps de méthode
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.
Sans valeur de retour
Type : void
void [nom de la méthode]() {
// instructions
} // retour implicite Ă l'accolade fermante
ou
void [nom de la méthode]() {
// autres instructions
return; // retour explicite sans valeur de retour
}
Avec valeur de retour
Type : int, double, String, etc.
[type de retour] [nom de la méthode]() {
// autres instructions
return [valeur]; // retour explicite oĂč valeur est du type de retour
}
Deux exemples
Le programme ci-dessous montre un exemple trÚs simple (et banal) de deux méthodes avec valeur de retour.
Fichier :
BasicReturn.java
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()
- Type de retour :
String: retourne"Dave3000", unStringlittĂ©ral - Quand on lâappelle dans
main(ligne 10), on assigne la valeur retournĂ©e Ă la variablename, quâon affiche ensuite Ă la ligne 11.
int getMeaningOfLife()
- Type de retour :
int: retourne42, unintlittĂ©ral - Quand on lâappelle dans
main(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()
- Type de retour :
void: ne retourne rien - retourne implicitement à la fin de la méthode (sans instruction
return)
Diagramme de flux pour une méthode avec valeur de retour
Ce quâon a dĂ©jĂ appris sur les diagrammes de flux pour les mĂ©thodes sâapplique, mais il faut maintenant :
- Indiquer dans la définition de la méthode ce qui sera retourné
- Utiliser dans lâalgorithme principal ce qui est retournĂ© suite Ă lâappel de la mĂ©thode
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 :
- une pour lâappel de la mĂ©thode et
- une pour utiliser la valeur de retour.
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.
Structure gĂ©nĂ©rale pour lâutilisation dâune mĂ©thode avec valeur de retour
Tracer la sĂ©quence dâexĂ©cution
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 :
- le fait de retourner Ă la mĂȘme ligne que lâappel devrait faire plus de sens;
- on nâarrive pas Ă la ligne de lâaccolade fermante sâil y a une instruction
return; lâaccolade fermante est unreturnimplicite dans les autres cas.
9
10 -> 1
10 <- 2
11
12 -> 5
12 <- 6
13
Pour getName
10 -> 1
est lâappel
10 <- 2
est lâassignation de la valeur de retour Ă name
Pour getMeaningOfLife
12 -> 5
est lâappel
12 <- 6
est lâaffichage de la valeur de retour
Diagramme de dépendances
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 panneauStructure(Outlineen 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.

Exercices
đ ïž Pratique
Travaillez dans le répertoire GitHub partagé par votre enseignant pour la pratique et les exercices
- Créer un fichier
DeclaringMethods.javaqui respecte le diagramme de dĂ©pendances ci-dessous ainsi que les dĂ©tails dâimplĂ©mentation suivants :showTheNumberaffiche la valeur retournĂ©e degetTheNumberet ne retourne rien ĂmainmakeItCapsretourne une valeur en majuscules du texte retournĂ©e pargetTheWords. Cette valeur sera affichĂ©e parmain. Indice: utiliser la mĂ©thodetoUpperCase()pour changer la casse de lettres.
- Prendre une capture dâĂ©cran de la section
Structurede VS Code. Quelle est le type de retour des mĂ©thodesshowTheNumberetmainqui ne retournent rien au programme? Conservez la capture comme./captures/declaringMethods_structure.png - Lancer le programme et prendre une capture dâĂ©cran de la session Ă la console. Nomme-la
./captures/declaringMethods.png. - Créer un diagramme de flux nommé
./diagrams/declaringMethods.drawiopour le programme. - Tracer lâexĂ©cution avec un diagramme de sĂ©quence dâexĂ©cution que vous Ă©crivez dans le commentaire dâen-tĂȘte du code source.


