1. Introduction
Commençons par une question : pourquoi une méthode devrait-elle renvoyer quelque chose ? Pourquoi ne pas simplement tout faire à l’intérieur de la méthode et afficher le résultat à l’écran ?
En effet, il ne s’agit pas seulement d’exécuter une action, mais souvent d’obtenir un résultat qui servira ailleurs dans le programme. Par exemple :
- Une méthode calcule la somme de deux nombres et la renvoie afin que nous puissions utiliser le résultat pour d’autres calculs.
- Une méthode détermine si un nombre est pair et renvoie true ou false, afin que nous puissions prendre une décision.
- Une méthode renvoie une chaîne de salutation pour l’utilisateur, et nous décidons où l’envoyer — l’afficher à l’écran, l’écrire dans un fichier, l’envoyer sur le réseau.
Si les méthodes se contentaient toujours d’imprimer le résultat, notre programme serait rigide et collé à un seul scénario, et il serait difficile de réutiliser la logique. Une valeur de retour rend les méthodes flexibles et universelles.
Analogie
Imaginez une machine à café. Vous mettez de l’argent, vous appuyez sur un bouton — et vous recevez un café. Si la machine disait simplement à haute voix « Le café est prêt ! » (mais ne donnait pas de café), vous ne seriez pas content. C’est pareil avec les méthodes : parfois on ne veut pas juste entendre « C’est fait ! », on veut obtenir un résultat.
2. Type de valeur de retour : que peut renvoyer une méthode
En Java, lorsque vous déclarez une méthode, vous indiquez le type de la valeur de retour — cela peut être n’importe quel type : int, double, String, boolean, un tableau, voire un objet de votre propre classe. Si la méthode ne renvoie rien, on écrit void.
Syntaxe :
return_value_type methodName(parameters)
{
// corps de la méthode
}
Exemples :
int sum(int a, int b)
{
// renvoie un int
}
String getGreeting(String name)
{
// renvoie un String
}
boolean isEven(int number)
{
// renvoie un boolean
}
void printHello()
{
// ne renvoie rien - exécute simplement une action
}
Important ! Le type de retour est une « promesse » de la méthode : elle doit renvoyer une valeur de ce type. Si vous avez promis de renvoyer un int, mais que vous renvoyez un String, le compilateur protestera et n’autorisera pas la compilation du programme.
3. L’opérateur return : comment renvoyer une valeur depuis une méthode
Pour réellement « donner » le résultat du travail de la méthode vers l’extérieur, on utilise l’opérateur return. Ce mot signifie : « Voici le résultat — et mon travail s’arrête là. »
int sum(int a, int b)
{
int result = a + b;
return result; // on renvoie le résultat
}
On peut faire plus court :
int sum(int a, int b)
{
return a + b;
}
Quand la méthode atteint la ligne return, elle termine son exécution, renvoie la valeur indiquée et la transmet à l’endroit d’où elle a été appelée.
Important : le type de la valeur après return doit correspondre au type déclaré de la méthode.
4. Utilisation de la valeur de retour : qu’en faire ?
Quand une méthode renvoie une valeur, vous pouvez :
- La stocker dans une variable.
- L’utiliser directement dans une expression.
- La passer à une autre méthode.
int result = sum(5, 7); // on le stocke dans une variable
System.out.println(result); // on affiche le résultat
System.out.println(sum(10, 20)); // on affiche directement le résultat
if (isEven(42))
{
System.out.println("Le nombre est pair!");
}
Exemple : une méthode qui renvoie une chaîne
String getGreeting(String name)
{
return "Bonjour, " + name + "!";
}
// Utilisation :
String greeting = getGreeting("Alisa");
System.out.println(greeting); // Bonjour, Alisa !
5. Pratique : exemples de méthodes avec valeur de retour
Méthode qui renvoie le maximum de deux nombres
int max(int a, int b)
{
if (a > b)
{
return a;
}
else
{
return b;
}
}
On peut faire encore plus court si vous maîtrisez déjà l’opérateur ternaire :
int max(int a, int b)
{
return (a > b) ? a : b;
}
Utilisation :
int maximum = max(10, 25);
System.out.println("Maximum: " + maximum); // Maximum: 25
Méthode qui renvoie true si le nombre est pair
boolean isEven(int number)
{
return number % 2 == 0;
}
Utilisation :
if (isEven(18))
{
System.out.println("Le nombre est pair!");
}
else
{
System.out.println("Le nombre est impair!");
}
Méthode qui renvoie la somme des éléments d’un tableau
int sumArray(int[] arr)
{
int sum = 0;
for (int i = 0; i < arr.length; i++)
{
sum += arr[i];
}
return sum;
}
Utilisation :
int[] grades = {5, 4, 3, 5, 4};
int total = sumArray(grades);
System.out.println("Somme des notes: " + total);
6. Ce qui se passe lors de l’appel d’une méthode avec return
Quand vous appelez une méthode qui renvoie une valeur, l’exécution du programme « entre » dans la méthode, exécute son code, atteint return, renvoie la valeur — et la substitue à l’endroit de l’appel.
Schématiquement :
int a = 2;
int b = 3;
int c = sum(a, b); // ici sum(2, 3) est appelé, 5 est renvoyé, c prend la valeur 5
Organigramme
graph TD
A["main"] --> B["sum(a, b)"]
B --> C[calculs]
C --> D[return résultat]
D -->|le résultat est renvoyé| A
7. Nuances utiles
return met fin à l’exécution de la méthode
Dès que return est rencontré dans une méthode, l’exécution de la méthode s’arrête immédiatement. Tout ce qui suit ne s’exécute pas.
int test()
{
return 42;
System.out.println("Ceci ne sera pas imprimé"); // unreachable
}
return dans une méthode de type void
Dans une méthode void (qui ne renvoie rien), on peut utiliser return sans valeur — simplement pour terminer l’exécution de la méthode de manière anticipée, par exemple sous une condition.
void printPositive(int number)
{
if (number <= 0)
{
System.out.println("Le nombre n'est pas positif!");
return; // on sort simplement de la méthode
}
System.out.println("Nombre: " + number);
}
8. Erreurs fréquentes avec return
Erreur n° 1 : toutes les branches ne renvoient pas une valeur
int getSign(int number)
{
if (number > 0)
{
return 1;
}
// Et si number <= 0 ? Pas de return !
}
// Erreur: toutes les branches du code ne renvoient pas une valeur
Comment corriger : prévoyez toujours un return sur tous les chemins d’exécution.
int getSign(int number)
{
if (number > 0)
{
return 1;
}
else if (number < 0)
{
return -1;
}
else
{
return 0;
}
}
Erreur n° 2 : type de valeur de retour non conforme
int getNumber()
{
return "42"; // Erreur ! On attendait un int, pas un String
}
Erreur n° 3 : return après un return
int test()
{
return 5;
System.out.println("Ceci ne s'exécutera pas"); // unreachable statement
}
Erreur n° 4 : return avec une expression dans une méthode void
void printSomething()
{
return 42; // Erreur ! Une méthode void ne peut pas renvoyer de valeur
}
Erreur n° 5 : ignorer la valeur de retour
sum(10, 20); // et c'est tout ? Résultat perdu !
Si vous n’utilisez pas la valeur de retour, elle est simplement perdue. N’oubliez pas de la stocker ou de la transmettre plus loin dans le code !
Erreur n° 6 : penser que return affiche quelque chose
int result = sum(2, 3);
// return n'affiche rien !
// Il faut l'afficher explicitement :
System.out.println(result);
GO TO FULL VERSION