Un método puede devolver datos al código que lo invoca, y el valor devuelto reemplazará directamente la posición de la expresión de llamada.
Si necesitas que el método devuelva información, debes declarar un tipo de retorno antes del nombre del método. Usa void cuando no exista valor de retorno.
También puedes usar return en métodos sin valor devuelto, pero sin escribir ningún valor después. Solo hace falta poner return;. Esto detiene la ejecución, no se ejecuta el código posterior y el flujo vuelve al punto de llamada.
int Add(int a, int b) // Devuelve un valor de tipo int
{
return a + b;
}Lenguaje del código: JavaScript (javascript)
void SayHi() // Sin valor de retorno
{
Console.WriteLine("hello welcome to foxdevelop.com");
}Lenguaje del código: JavaScript (javascript)
1. Los métodos con retorno obligatoriamente deben emplear return expresión;. El tipo del resultado de la expresión debe coincidir con el tipo declarado;
int Add(int a, int b)
{
return 1.2; // Error. 1.2 es double y no se puede convertir implícitamente a int, hay incompatibilidad de tipos
}Lenguaje del código: JavaScript (javascript)
El código anterior intenta devolver un valor double. El literal 1.2 es por defecto double, es decir, número de punto flotante. El compilador no puede transformar automáticamente un decimal a entero, por eso salta el error.
Si escribimos el caso contrario
double Add2()
{
return 10; // 10 es int y se convierte implícitamente a double, no hay error
}Lenguaje del código: JavaScript (javascript)
Esta versión compila sin fallos. Aunque 10 sea un entero, la conversión implícita hacia double está permitida y los tipos son compatibles. No te bases solo en el nombre del tipo, revisa si se admite conversión implícita.
La conversión implícita sucede cuando no escribes código manual para transformar tipos: el compilador lo hace por ti. Por el contrario, aquellas conversiones que defines explícitamente como desarrollador se llaman conversiones explícitas.
Estudiaremos la conversión de tipos más adelante.
2. Cada rama de ejecución dentro de un método con retorno debe alcanzar finalmente una sentencia return. No puede haber caminos que finalicen sin devolver un valor.

El método que vemos arriba declara int antes del nombre Add para indicar que devuelve entero, pero no tiene ninguna sentencia return en su cuerpo. Esto también generará un error.

Esta escritura también causa error. La sentencia return solo se ejecuta si se cumple la condición if. Cuando a >= b, no se ejecuta return, existe una vía sin valor devuelto.

Incluso si añades un bloque else, sin return dentro persistirá el mismo problema: ramas sin retorno. Esta norma rige para otras estructuras de control. Asegúrate de cubrir todas las vías de ejecución.
Existe una forma de solucionarlo: añadir una sentencia return al final del método como respaldo. Por ejemplo
int Add(int a, int b)
{
if (a < b)
{
return a + b;
}
else
{
}
return -1; // Independientemente de las ramas anteriores, si llega aquí devuelve un valor
// El valor -1 funciona como valor de respaldo.
}Lenguaje del código: C# (cs)
Los valores de retorno admiten todo tipo de datos: tipos básicos (int, string, etc.), clases personalizadas, colecciones y más;
Al ejecutar return se finaliza el método inmediatamente y no se ejecuta el código siguiente;
Las llamadas a métodos con retorno se pueden insertar directamente en expresiones, impresiones, asignaciones y otros contextos.
Valor de retorno