"OK, proviamo un altro approccio. Ti mostrerò come funzionano i metodi di chiamata, quindi prova a ripetere la lezione precedente, OK?"

"Facciamolo."

"Fantastico. Ti parlerò delle funzioni/metodi di chiamata e dei valori che restituiscono (valori restituiti)."

"I comandi, o istruzioni, sono raggruppati in metodi in modo che possano essere eseguiti come un singolo blocco, come un singolo comando complesso. Per fare ciò, è necessario scrivere il nome del metodo (funzione) e quindi elencare gli argomenti del metodo tra parentesi."

Esempio
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);
    }
}

"Nell'esempio sopra, abbiamo scritto una funzione che visualizzerà la stringa passata sullo schermo quattro volte. Quindi abbiamo chiamato la print4funzione nella riga 6."

"Quando il programma raggiunge la riga 6, salterà alla riga 9, assegnando il valore 'I like to move it, move it'alla variabile s."

"Quindi verranno eseguite le righe 11-14. La funzione terminerà e il programma riprenderà alla riga 7."

"Vedo."

"Non solo puoi passare argomenti (valori) a una funzione: una funzione può restituire il risultato del suo lavoro (valore di ritorno). Questo viene fatto con la parola chiave return. Ecco come appare:"

Esempio 1.
Determina il minimo di due numeri.
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;
   }
}
Ecco come funziona:
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);
   }
}

"Penso che stia iniziando ad avere un senso! Il codice nelle colonne sinistra e destra è in realtà lo stesso. È solo che il codice a sinistra ha una funzione autonoma."

"La funzione calcola un certo valore e usa l'istruzione return per passare quel valore a qualunque cosa l'abbia chiamato. Almeno, è così che la vedo io."

"E hai ragione!"

"Ma cos'è questo tipo di vuoto?"

"Alcune funzioni eseguono semplicemente qualcosa senza calcolare o restituire alcun valore, come il nostro metodo main() . Per tali funzioni è stato creato un tipo di ritorno speciale, void ."

"Perché non dichiarare semplicemente nulla se una funzione non restituisce nulla?"

"Ricordi come dichiariamo qualsiasi variabile? Tipo e nome. Per le funzioni, dichiariamo un tipo, un nome e parentesi. Un nome di funzione seguito da parentesi è come chiami la funzione."

"Quindi, è stato più facile inventare un 'tipo vuoto' piuttosto che dividere le funzioni in due categorie: quelle che restituiscono valori e quelle che non lo fanno?"

"Esattamente! Sei davvero intelligente, ragazzo mio."

"Come restituiamo un tipo void?"

"Noi no. Funziona così. Quando si esegue l'istruzione return, la macchina Java calcola il valore dell'espressione a destra della parola 'return', memorizza questo valore in una parte speciale della memoria e termina immediatamente la funzione . Il valore memorizzato viene utilizzato dove è stata chiamata la funzione, come risultato della chiamata della funzione. Puoi vederlo nell'esempio che ho fornito in precedenza."

"Intendi dire la parte in cui int m = min(a, b) si trasforma in m = m2?"

"Sì. Dopo che la funzione è terminata, tutto funziona come se il valore di ritorno della funzione fosse scritto al suo posto. Ripeti questa frase nella tua mente e guarda il codice nell'ultimo esempio. "

"Penso che questo sembri solo facile. In realtà è difficile. Ne ho capito solo alcune parti."

"Va bene. Al primo tentativo, puoi capire solo cose che già conosci. Più cose non capisci, più ti stai immergendo in qualcosa di nuovo e migliori saranno i tuoi risultati. Diventerà più chiaro con il tempo ."

"Bene, se lo dici tu. Andiamo avanti."