CodeGym /Cours Java /Syntaxe Java /Appel de méthodes, renvoi de valeurs

Appel de méthodes, renvoi de valeurs

Syntaxe Java
Niveau 2 , Leçon 7
Disponible

« Bon, tentons une autre approche. Je vais te montrer comment les appels de méthode fonctionnent, et après ça tu essaieras de relire la leçon précédente, OK ? »

« C'est parti. »

« Parfait. Je vais te parler des appels de fonction/méthode et des valeurs qu'elles renvoient (valeurs de retour). »

« Les commandes, ou instructions, sont regroupées en méthodes afin qu'elles puissent être exécutées en un seul bloc, comme une commande complexe unique. Pour ce faire, tu dois écrire le nom de la méthode (fonction) et ensuite indiquer les arguments de la méthode entre parenthèses. »

Exemple
package com.codegym.lesson2;
public class MethodCall
{
    public static void main(String[] args)
    {
         print4("I like to move it, move it.");
    }

    public static void print4(String s)
    {
        System.out.println(s);
        System.out.println(s);
        System.out.println(s);
        System.out.println(s);
    }
}

« Dans l'exemple ci-dessus, nous avons écrit une fonction qui affiche la chaîne passée à l'écran quatre fois. Ensuite, nous avons appelé la fonction print4 à la ligne 6. »

« Quand le programme atteint la ligne 6, il passe à la ligne 9, et affecte la valeur 'I like to move it, move it' à la variable s."

"Ensuite, les lignes 11 à 14 sont exécutées. La fonction se termine, et le programme reprend à la ligne 7. »

« Je vois. »

« Non seulement tu peux passer des arguments (valeurs) à une fonction, mais une fonction peut aussi renvoyer le résultat de ses travaux (valeur de retour). Pour cela, nous utilisons le mot-clé return. Voici comment ça se passe : »

Exemple 1.
Détermine le plus petit de deux nombres.
public class MethodCall
{
   public static void main(String[] args)
   {
      int a = 5, b = 7;
      int m = min(a, b);
      System.out.println("The minimum is "+ m);
   }

   public static int min(int c, int d)
   {
      int m2;
      if (c < d)
           m2 = c;
      else
           m2 = d;

      return m2;
   }
}
Voici comment cela fonctionne :
public class MethodCall
{
   public static void main(String[] args)
   {
      int a = 5, b = 7;
      int c = a, d = b;
      int m2;
      if (c < d)
           m2 = c;
      else
           m2 = d;

      int m = m2;
      System.out.println("The minimum is "+ m);
   }
}

« Je commence à saisir la logique ! Le code dans les colonnes de gauche et de droite est en réalité le même. C'est juste que le code à gauche a une fonction autonome. »

« La fonction calcule une certaine valeur et utilise l'instruction return pour passer cette valeur à l'entité qui l'a appelée. Du moins, c'est comme ça que je vois la chose. »

« Et tu as bien raison ! »

« Mais c'est quoi, ce type void ? »

« Certaines fonctions font juste quelque chose sans calculer ou renvoyer de valeur, comme notre méthode main(). Un type de retour spécial, void, a été créé pour ces fonctions. »

« Pourquoi ne pas juste rien déclarer si une fonction ne renvoie rien ? »

« Tu te souviens de comment on déclare une variable ? Un type et un nom. Pour les fonctions, on a un type, un nom et des parenthèses. Un nom de fonction suivi par des parenthèses est la façon dont tu appelles la fonction. »

« Donc c'était plus facile d'inventer un 'type void' que de diviser les fonctions en catégories : celles qui renvoient des valeurs et celles qui ne le font pas ? »

« Exactement ! Tu es sacrément malin, mon garçon. »

« Comment on retourne un type void ? »

« On ne le fait pas. Ça marche comme ça. Quand tu exécutes l'instruction return, la machine Java calcule la valeur de l'expression à droite du mot 'return', stocke cette valeur dans une partie spéciale de la mémoire, et termine immédiatement la fonction. La valeur stockée est utilisée là où la fonction a été appelée, suite à l'appel de la fonction. Tu peux le voir dans l'exemple que je t'ai donné plus tôt. »

« Tu veux dire la partie où int m = min (a, b) est transformé en m = 2 ? »

« Oui. Une fois la fonction terminée, tout fonctionne comme si la valeur de retour de la fonction était écrite à la place. Répète cette phrase dans ta tête et observe le code du dernier exemple. »

« Ce n'est facile qu'en apparence. C'est super difficile, en fait. Je n'ai compris qu'une partie. »

« C'est pas grave. Lors du premier essai, tu ne peux comprendre que les choses que tu connais déjà. Plus il y a de choses que tu ne comprends pas, plus tu te plongeras profondément dans quelque chose de nouveau, et meilleurs seront tes résultats. Ça deviendra plus clair avec le temps. »

« Bon, si tu le dis. Continuons, alors. »

Commentaires (6)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Hito Fires niveau 4, Strasbourg, France
8 mai 2020
Bonjour, Dans la partie de droite : int m = m2; System.out.println("le plus petit nombre est "+ m); Ne peut on pas simplifier en mettant m2 directement sur la ligne "System.out......." et dans ce cas enlever la ligne int m=m2 qui ne sert plus à rien? (enfin si je comprends bien :) ) (et si je ne me suis pas tromper du coup renommer m2 en m)
Nico niveau 3, Roubaix, France
25 mars 2020
Bonjour, sur cette lecon quelque chose m'écchappe, je comprend bien le code de droite, par contre a gauche j'arrive pas a faire le lien avec c et d .... si quelqu'un comprend mes interrogations et pourrait m'expliqué , je vous remerci !
Sylvain Laroussinie niveau 7, Lyon, France
31 mars 2020
Bonjour Nico , Je ne sais pas si tu as eu ta réponse , mais en gros ton c et d correspondent à ton a et b. Ils sont la uniquement dans la but de calculer m2 et de retourner la valeur m2 dans ta fonction principal.
Alexandre42 niveau 3, France, France Expert
8 février 2024
Bonjour, bon 4 ans se sont écoulés, je ne perd pas espoir que l'on me réponde. Pour reprendre le commentaire de Sylvain, en quoi "c" et "d" correspondent-ils à "a" et "b" ? A aucun moment il y a eu un renvoi de valeur de type a = c ou b = d ... Ou alors j'ai mal compris ou lu quelque chose. Cordialement,
thomas.lucie99 niveau 3, France, France
23 février 2024
Bonjour, alors je t'avoue que je n'ai pas totalement compris le pourquoi du comment et je ne suis pas sure à 100%, mais dans le code de gauche ils déclarent : " int m = min(a, b)" et ensuite "public static int min(int c, int d)". Je pense que le lien justement entre a, b et c, d c'est le nom de la méthode, ici min (dans l'exemple du cours suivant ce n'était pas min c'était un autre). Si quelqu'un a des explications plus précise je suis preneuse aussi :) Merci, bonne journée!
Fodekpop niveau 3, Clermont-Ferrand, France
5 juin 2024
Alors voilà comment je l'ai compris personnellement, sans être sûr non plus : En gros dans ta méthode main tu as tes variables a et b déclarées avec tes valeurs 5 et 7 affectées immédiatement. Ensuite ligne 6

int m = min(a, b);
--> on déclare la variable int m dont la valeur sera le résultat de la methode min appliquée aux variables a et b. A ce moment-là, on ne passe pas à la ligne 7, on appelle immédiatement la méthode min écrite plus bas, qui démarre à la ligne 10, et qui est distincte de la méthode main. Cette méthode créée deux nouvelles variables, c et d, puis une autre appelée m2. Comme on peut le voir, ces variables n'ont pas de valeur affectée. On voit cependant la logique de la méthode qui calcule le plus petit entre c et d, quelles que soient leurs valeurs, un peu comme dans une leçon théorique de cours de maths au lycée, puis qui renvoie la plus petite des deux valeurs théoriques dans la variable m2 ("return m2"). Puis on reprend le code ligne 6, cette méthode min théorique avec c et d est appliquée aux variables a et b qui cette fois-ci ont des valeurs bien réelles, et de la même façon la variable m2 théorique qui est le minimum correspond à m dans cet exemple concret. Enfin le programme imprime m. Voilà comment je l'ai compris, après je débute aussi donc ça serait chouette si quelqu'un de plus calé pouvait confirmer et corriger tout ça ;)