CodeGym /Cursos /JAVA 25 SELF /Valores de retorno, return

Valores de retorno, return

JAVA 25 SELF
Nivel 8 , Lección 3
Disponible

1. Introducción

Empecemos con una pregunta: ¿para qué debe un método devolver algo? ¿Por qué no hacer todo dentro del método y simplemente imprimir el resultado en pantalla?

La cuestión es que a menudo no necesitamos solo realizar alguna acción, sino obtener un resultado que luego será útil en otras partes del programa. Por ejemplo:

  • Un método calcula la suma de dos números y la devuelve para que podamos usar el resultado en cálculos posteriores.
  • Un método determina si un número es par y devuelve true o false, para que podamos tomar una decisión.
  • Un método devuelve una cadena de saludo para el usuario, y nosotros decidimos adónde enviarla — mostrarla en pantalla, escribirla en un archivo o enviarla por la red.

Si los métodos siempre imprimieran el resultado, nuestro programa estaría rígidamente atado a un único escenario y reutilizar la lógica sería difícil. El valor de retorno hace que los métodos sean flexibles y universales.

Analogía

Imagina una máquina de café. Metes dinero, pulsas un botón — y recibes café. Si la máquina solo dijera en voz alta «¡El café está listo!» (pero no te diera el café), no te alegraría. Con los métodos ocurre lo mismo: a veces no basta con oír «¡Listo!», sino que quieres obtener el resultado.

2. Tipo de valor de retorno: qué puede devolver un método

En Java, cuando declaras un método, indicas el tipo de valor de retorno — puede ser cualquier tipo: int, double, String, boolean, un array, incluso un objeto de tu propia clase. Si el método no devuelve nada — escribimos void.

Sintaxis:

type_of_returned_value methodName(parameters)
{
    // cuerpo del método
}
Firma del método

Ejemplos:

int sum(int a, int b) 
{
    // devuelve int
}

String getGreeting(String name) 
{
    // devuelve String
}

boolean isEven(int number) 
{
    // devuelve boolean
}

void printHello() 
{
    // no devuelve nada — solo realiza una acción
}

¡Importante! El tipo de valor de retorno es la «promesa» del método: está obligado a devolver un valor de ese tipo. Si prometes devolver int pero devuelves String, el compilador se quejará y no permitirá compilar el programa.

3. Operador return: cómo devolver un valor desde un método

Para devolver realmente el resultado del trabajo del método «hacia fuera», se usa el operador return. Esta palabra dice: «Aquí tienes el resultado — y con esto mi trabajo ha terminado».

int sum(int a, int b) 
{
    int result = a + b;
    return result; // devolvemos el resultado
}
Devolver un valor mediante return

Se puede hacer más corto:

int sum(int a, int b) 
{
    return a + b;
}

Cuando el método llega a la línea return, finaliza la ejecución, devuelve el valor indicado y lo entrega al lugar desde donde fue llamado.

Importante: el tipo del valor tras return debe coincidir con el tipo declarado del método.

4. Uso del valor de retorno: ¿qué hacer con él?

Cuando un método devuelve un valor, puedes:

  • Guardarlo en una variable.
  • Usarlo directamente en una expresión.
  • Pasarlo a otro método.
int result = sum(5, 7); // lo guardamos en una variable
System.out.println(result); // mostramos el resultado

System.out.println(sum(10, 20)); // mostramos el resultado directamente

if (isEven(42)) 
{
    System.out.println("¡El número es par!");
}

Ejemplo: método que devuelve una cadena

String getGreeting(String name) 
{
    return "Hola, " + name + "!";
}

// Uso:
String greeting = getGreeting("Alicia");
System.out.println(greeting); // ¡Hola, Alicia!

5. Práctica: ejemplos de métodos con valor de retorno

Método que devuelve el máximo de dos números

int max(int a, int b) 
{
    if (a > b) 
    {
        return a;
    } 
    else 
    {
        return b;
    }
}

Se puede incluso más corto si ya dominas el operador ternario:

int max(int a, int b) 
{
    return (a > b) ? a : b;
}

Uso:

int maximum = max(10, 25);
System.out.println("Máximo: " + maximum); // Máximo: 25

Método que devuelve true si el número es par

boolean isEven(int number) 
{
    return number % 2 == 0;
}

Uso:

if (isEven(18)) 
{
    System.out.println("¡El número es par!");
} 
else 
{
    System.out.println("¡El número es impar!");
}

Método que devuelve la suma de los elementos de un array

int sumArray(int[] arr) 
{
    int sum = 0;
    for (int i = 0; i < arr.length; i++) 
    {
        sum += arr[i];
    }
    return sum;
}

Uso:

int[] grades = {5, 4, 3, 5, 4};
int total = sumArray(grades);
System.out.println("Suma de las notas: " + total);

6. Qué ocurre al invocar un método con return

Cuando llamas a un método con valor de retorno, la ejecución del programa «entra» en el método, ejecuta su código, llega a return, devuelve el valor y lo coloca en el lugar de la llamada.

De forma esquemática:

int a = 2;
int b = 3;
int c = sum(a, b); // aquí se llama a sum(2, 3), se devuelve 5 y c pasa a valer 5

Diagrama de flujo

        graph TD
        A["main"] --> B["sum(a, b)"]
        B --> C[cálculos]
        C --> D[return result]
        D -->|el resultado se devuelve| A
    

7. Matices útiles

return finaliza la ejecución del método

En cuanto aparece return en un método, su ejecución se interrumpe inmediatamente. Todo lo que esté después — no se ejecuta.

int test()
{
    return 42;
    System.out.println("Esto no se imprimirá"); // unreachable
}

return en un método de tipo void

En un método void (que no devuelve nada) se puede usar return sin valor — simplemente para terminar antes la ejecución del método, por ejemplo, bajo cierta condición.

void printPositive(int number)
{
    if (number <= 0) 
    {
        System.out.println("¡El número no es positivo!");
        return; // salimos del método sin más
    }
    System.out.println("Número: " + number);
}

8. Errores típicos al trabajar con return

Error n.º 1: no todos los caminos devuelven un valor

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    }
    // ¿Y si number <= 0? ¡No hay return!
}
// Error: no todos los caminos del código devuelven un valor

Cómo corregirlo: asegúrate de tener return en todos los caminos de ejecución.

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    } 
    else if (number < 0) 
    {
        return -1;
    } 
    else 
    {
        return 0;
    }
}

Error n.º 2: discordancia del tipo de retorno

int getNumber()
{
    return "42"; // ¡Error! Se esperaba int, no String
}

Error n.º 3: return después de return

int test()
{
    return 5;
    System.out.println("Esto no se ejecutará"); // unreachable statement
}

Error n.º 4: return con expresión en un método void

void printSomething()
{
    return 42; // ¡Error! Un método void no puede devolver un valor
}

Error n.º 5: ignorar el valor de retorno

sum(10, 20); // ¿y ya está? ¡Se perdió el resultado!

Si no utilizas el valor de retorno, simplemente se pierde. ¡No olvides guardarlo o pasarlo más adelante en el código!

Error n.º 6: esperar que return imprima algo

int result = sum(2, 3);
// return no imprime nada
// Hay que mostrarlo explícitamente:
System.out.println(result);
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION