"Está bien, probemos con otro enfoque. Te mostraré cómo funcionan los métodos de llamada y luego intentas volver a la lección anterior, ¿de acuerdo?"

"Vamos a hacerlo."

"Genial. Te hablaré sobre llamar a funciones/métodos y los valores que devuelven (valores de retorno)".

"Los comandos o declaraciones se agrupan en métodos para que puedan ejecutarse como un solo bloque, como un solo comando complejo. Para hacer esto, debe escribir el nombre del método (función) y luego enumerar los argumentos del método entre paréntesis".

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

"En el ejemplo anterior, escribimos una función que mostrará la cadena pasada en la pantalla cuatro veces. Luego llamamos a la print4función en la línea 6".

"Cuando el programa llegue a la línea 6, saltará a la línea 9, asignando el valor 'I like to move it, move it'a la variable s".

"Entonces se ejecutarán las líneas 11-14. La función finalizará y el programa se reanudará en la línea 7".

"Veo."

"No solo puede pasar argumentos (valores) a una función, sino que una función puede devolver el resultado de su trabajo (valor devuelto). Esto se hace con la palabra clave return. Así es como se ve:"

Ejemplo 1.
Determinar el mínimo de dos números.
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;
   }
}
Así es como funciona:
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);
   }
}

"¡Creo que está empezando a tener sentido! El código de las columnas izquierda y derecha es en realidad el mismo. Es solo que el código de la izquierda tiene una función independiente".

"La función calcula un cierto valor y usa la declaración de retorno para pasar ese valor a lo que sea que lo haya llamado. Al menos, así es como lo veo".

"¡Y tienes razón!"

"Pero, ¿qué es este tipo de vacío?"

"Algunas funciones simplemente hacen algo sin calcular ni devolver ningún valor, como nuestro método main() . Se creó un tipo de devolución especial, void, para tales funciones".

"¿Por qué no declarar nada si una función no devuelve nada?"

"¿Recuerdas cómo declaramos cualquier variable? Tipo y nombre. Para funciones, declaramos un tipo, nombre y paréntesis. Un nombre de función seguido de paréntesis es cómo llamas a la función".

"Entonces, ¿fue más fácil inventar un 'tipo vacío' que dividir las funciones en dos categorías: las que devuelven valores y las que no?"

"¡Exactamente! Eres muy inteligente, muchacho".

"¿Cómo devolvemos un tipo vacío?"

"Nosotros no. Funciona así. Al ejecutar la instrucción return, la máquina Java calcula el valor de la expresión a la derecha de la palabra 'return', almacena este valor en una parte especial de la memoria e inmediatamente finaliza la función . El valor almacenado se usa donde se llamó a la función, como resultado de llamar a la función. Puede verlo en el ejemplo que di anteriormente".

"¿Te refieres a la parte donde int m = min(a, b) se transforma en m = m2?"

"Sí. Una vez finalizada la función, todo funciona como si el valor de retorno de la función estuviera escrito en su lugar. Repite esta frase en tu mente y mira el código en el último ejemplo " .

"Creo que esto solo parece fácil. En realidad es difícil. Solo he entendido partes".

"Está bien. En el primer intento, solo puedes entender cosas que ya sabes. Cuantas más cosas no entiendas, más profundamente te sumergirás en algo nuevo y mejores serán tus resultados. Se volverá más claro con el tiempo. ."

"Bueno, si tú lo dices. Sigamos".