CodeGym /Cursos /C# SELF /Valor de retorno y el operador return

Valor de retorno y el operador return

C# SELF
Nivel 8 , Lección 3
Disponible

1. Introducción

Imagínate esto: pides una pizza por teléfono (o por una app, que ya estamos en el siglo XXI). Le das al operador los detalles del pedido, y el operador te devuelve el resultado: ¡la pizza! Si el operador se queda callado — te quedas con hambre y sin felicidad.

Así pasa con las funciones: a veces solo hacen algo, pero muchas veces queremos que la función también devuelva algo útil, ¡y ese resultado puede ser diferente cada vez según los datos de entrada! Por ejemplo:

  • Una función calcula la suma de dos números y te da el resultado.
  • Una función recibe la edad de una persona y devuelve la categoría ("niño", "adulto", "jubilado").
  • Una función crea una cadena bonita para saludar al usuario por su nombre.

Valor de retorno — es la forma en que una función “pasa” hacia fuera el resultado de su trabajo.

2. Firma de un método con valor de retorno

En la lección anterior vimos este patrón:

void PrintHello()
{
    Console.WriteLine("¡Hola!");
}
Método sin valor de retorno ( void)

El tipo void significa que la función no devuelve nada (void significa "vacío", ausencia de valor).

Ahora veamos cómo se ve una función que sí devuelve algo:

int Add(int a, int b)
{
    // cuerpo de la función
}
Método con valor de retorno ( int)

Aquí int delante del nombre de la función — es el tipo de dato que devuelve. O sea, si la función devuelve una cadena — ponemos string, si es decimal — double, y así sucesivamente.

La sintaxis para declarar una función es así:

<tipo de retorno> NombreMetodo(<parámetros>)
{
    // cuerpo de la función
}
Plantilla general de un método con valor de retorno

Ejemplos de diferentes firmas:

Firma Qué devuelve
int Sum(int a, int b)
Número entero
string GetGreeting(string name)
Cadena
double Multiply(double x, double y)
Número decimal
bool IsAdult(int age)
Valor booleano

3. Operador return: cómo devolver el resultado de una función

Para que todo funcione, no basta con poner el tipo correcto — hay que enseñarle a la función a enviar el resultado de vuelta “arriba”. Para eso sirve el operador return. Con él decimos: mira, devuelvo este valor, y en ese momento la función termina su ejecución (es como si “saliera” hacia fuera en ese instante).

tipo NombreMetodo(...)
{
    // algunos cálculos
    return valor;
}
Esquema de uso de return

Ejemplo:

int Add(int a, int b)
{
    int sum = a + b;
    return sum; // enviamos la suma como resultado de la función
}

Regla importante: el tipo del valor que devuelves con return debe coincidir totalmente (o ser compatible) con el tipo que pusiste en la firma del método.

4. Ejemplos: escribimos métodos que devuelven algo

¡Vamos a verlo con ejemplos! Mira algunos casos populares.

Ejemplo 1: sumar dos números

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

// Uso:
int result = Add(10, 20);
Console.WriteLine("Suma: " + result); // Salida: Suma: 30

Ejemplo 2: saludo personalizado

string CreateGreeting(string name)
{
    return "¡Hola, " + name + "!";
}

// Uso:
string greeting = CreateGreeting("Anna");
Console.WriteLine(greeting); // Salida: ¡Hola, Anna!

Ejemplo 3: comprobar mayoría de edad

bool IsAdult(int age)
{
    return age >= 18;
}

if (IsAdult(21))
{
    Console.WriteLine("Entrada permitida.");
}
else
{
    Console.WriteLine("Lo siento, solo para adultos.");
}
// Salida: Entrada permitida.

Ejemplo 4: valor de retorno y uso en expresiones

Console.WriteLine("El doble: " + MultiplyByTwo(7));

int MultiplyByTwo(int n)
{
    return n * 2;
}

5. Tipo de valor de retorno: variedad y particularidades

En C# una función puede devolver cualquier "tipo" (no solo números, cadenas y lo típico). Mira algunos casos:

  • Números enteros: int, long, short — fácil.
  • Decimales: double, float, decimal.
  • Cadenas: string.
  • Booleanos: bool.
  • Arrays: int[], string[] y así.
  • Tipos por referencia: objetos de clases que tú crees.
  • void: caso especial, cuando no se devuelve nada.

¿Por qué es tan importante el tipo de valor de retorno?

El compilador vigila que devuelvas lo que prometiste. Si prometiste devolver int, pero intentas devolver una cadena o nada — te da error. Como un jefe muy estricto.

Ejemplo de error:

int GetNumber()
{
    return "42"; // ¡Error! Se esperaba int, no string.
}

6. Operador return sin valor: para métodos void

Para ser justos, en métodos con tipo de retorno declarado (por ejemplo, int, string) el operador return siempre debe ir acompañado del valor que quieres devolver.

¡Pero! Si la función está declarada como void, igual puedes, si quieres, usar return sin valor — para terminar la función inmediatamente.

void PrintNumbers(int n)
{
    if (n <= 0)
    {
        Console.WriteLine("¡El número no debe ser negativo!");
        return; // Simplemente salimos de la función, sin devolver nada
    }
    for (int i = 1; i <= n; i++)
    {
        Console.WriteLine(i);
    }
}
return sin valor en un método void

Esto puede ser útil si quieres cortar la ejecución de la función por alguna condición, pero no necesitas devolver nada.

7. Errores típicos al usar return

¡Ay, cuántas veces los que empiezan a programar se rompen la cabeza con errores relacionados con return!

Problema nº1: falta return en una función que debería devolver algo

int GetValue(bool flag)
{
    if (flag)
        return 1;
    // ¡Ups! ¿Y si flag == false?
}
// Error: ¡no todas las ramas del código tienen return!

Solución: ¡asegúrate de tener return en todos los escenarios posibles! Por ejemplo:

int GetValue(bool flag)
{
    if (flag)
        return 1;
    else
        return 0;
}

Problema nº2: tipo de valor de retorno no coincide

double GetMagicNumber()
{
    return 42; // En principio, correcto (int se puede convertir a double)
    // Pero si la función devolviera int y devolvemos una cadena — ¡error!
}

Regla: cuida la compatibilidad de tipos. Si tienes dudas — puedes convertir explícitamente al tipo necesario:

return (double)42;

Problema nº3: return antes de tiempo

Recuerda que en cuanto se ejecuta return, el método se corta al instante. ¡Todo lo que venga después no se ejecuta!

int GetNumber()
{
    return 5;
    Console.WriteLine("Esta línea nunca se ejecutará"); // ¡el compilador incluso se quejará!
}

Problema nº4: return con valor en un método void (¡prohibido!)

void PrintSomething()
{
    return 1; // ¡No se puede devolver valor desde un método void!
}
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION