csharp-retorno-funciones

Retorno de funciones en C#

El retorno de una función es un valor que tras su finalización (y opcionalmente) una función puede devolver al código que la llamó. Para ello se emplea la palabra reservada return.

Este valor puede ser de cualquier tipo de datos, incluidos tipos básicos (como int, float, string), tipos complejos (como objetos y estructuras) e incluso tipos de datos personalizados.

También es posible que una función no devuelva ningún valor. Eso se indica mediante el tipo void.

Por otro lado únicamente es posible devolver un valor. Aunque podemos devolver una agrupación de valores (como una colección, una tupla o una clase).

Retorno de void

Cuando una función no necesita devolver ningún valor se declara con el tipo de retorno void. Estas funciones generalmente realizan acciones (como modificar el estado de un objeto o imprimir en la consola).

Por ejemplo, la función saludar() únicamente realiza una acción, no necesita devolver ningún valor. En ese caso empleamos la palabra reservada void.

public void Saludar()
{
    Console.WriteLine("¡Hola!");
}

Retorno de un valor

Como hemos dicho, una función puede devolver un único valor. Para ello se emplea la palabra clave return. En el momento que se alcanza un return, la ejecución de la función se detiene, y se devuelve el control a la función que la invocó.

Por ejemplo, función Sumar devuelve un valor de tipo int.

public int Sumar(int a, int b)
{
    return a + b;
	
	// si aqui hubiera algo, no se llegaría a ejecutar
}

Lógicamente, el tipo de retorno de la función debe coincidir con el tipo del valor que devolvemos.

Retorno de múltiples valores

Como decíamos, únicamente es posible devolver un único valor con una función. Sin embargo, podemos devolver una agrupación de valores.

Por ejemplo, podemos devolver múltiples valores encapsularlos en una clase o estructura.

public class Resultado
{
    public int Numero { get; set; }
    public string Texto { get; set; }
}

public Resultado ObtenerResultado()
{
    return new Resultado { Numero = 42, Texto = "Ejemplo" };
}

Esta es la forma más habitual de devolver múltiples valores en C#.

También podemos usar tuplas cuando queremos devolver múltiples valores desde una función.

public (int, string) ObtenerDatos()
{
    return (42, "Ejemplo");
}

Esto es útil cuando la agrupación que vamos a devolver tiene carácter temporal, y no nos merece la pena crear una estructura o objeto únicamente para la devolución.

Las funciones también pueden devolver objetos de cualquier tipo de colecciones, como arrays, listas, diccionarios.

Por ejemplo así.

public List<int> ObtenerLista()
{
    return new List<int> { 1, 2, 3, 4, 5 };
}

Ejemplos prácticos