« 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. »