Keyboard shortcuts

Touchez ← ou → pour naviguer les chapitres

Touchez S ou / pour chercher dans le livre

Touchez ? pour afficher ce message

Touchez Esc pour masquer ce message

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 instruction return [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 - comme nextInt(), nextDouble(), nextLine()
  • celles pour la classe Math - comme Math.pow() et Math.sqrt()
  • celles pour la classe String - comme length() et toUpperCase()
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 :

  1. On assigne souvent une variable du type approprié pour recevoir la valeur retournée, p. ex. String name = scanner.nextLine();
  2. 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. : info-bulle pour nextInt()

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 programme
  • println, print et printf de System.out - qui affichent des messages Ă  la console

Il y a quelques indices que ces méthodes ne retournent pas de valeur :

  1. On ne dĂ©clare aucune variable pour recevoir la valeur retournĂ© (car il n’y en a pas)
  2. Le mot-clé 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)

É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", un String littĂ©ral
  • Quand on l’appelle dans main (ligne 10), on assigne la valeur retournĂ©e Ă  la variable name, qu’on affiche ensuite Ă  la ligne 11.

int getMeaningOfLife()

  • Type de retour : int : retourne 42, un int littĂ©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 :

  1. Indiquer dans la définition de la méthode ce qui sera retourné
  2. 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 :

diagramme de flux pour BasicReturn

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 un return implicite 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 panneau Structure (Outline en anglais) de VS Code. structure du code dans 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.

diagramme de dépendance avec valeurs de retour

Exercices

đŸ› ïž Pratique

Travaillez dans le répertoire GitHub partagé par votre enseignant pour la pratique et les exercices

  1. CrĂ©er un fichier DeclaringMethods.java qui respecte le diagramme de dĂ©pendances ci-dessous ainsi que les dĂ©tails d’implĂ©mentation suivants :
    1. showTheNumber affiche la valeur retournée de getTheNumber et ne retourne rien à main
    2. 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.
  2. Prendre une capture d’écran de la section 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
  3. Lancer le programme et prendre une capture d’écran de la session Ă  la console. Nomme-la ./captures/declaringMethods.png.
  4. Créer un diagramme de flux nommé ./diagrams/declaringMethods.drawio pour le programme.
  5. 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.

diagramme de dépendance pour la pratique

© 2022-2025 David Crowley