Módulo 2 · Fundamentos de Programación

El valor de retorno (return)

return devuelve un resultado y termina la función. Diferencia entre devolver e imprimir, retornos múltiples y por qué tu ejercicio falla con undefined.

Definición rápida

return es la instrucción que entrega un valor como resultado de la función y finaliza su ejecución en ese punto.

return hace dos cosas a la vez: entrega un valor a quien llamó a la función y termina la ejecución de esa función en ese punto. Entender esas dos consecuencias resuelve el error más frecuente de los primeros ejercicios: la función que «funciona» pero devuelve undefined.

Devolver no es imprimir

function sumaMal(a, b) {
  console.log(a + b);   // lo muestra por consola
}

function sumaBien(a, b) {
  return a + b;         // lo entrega como resultado
}

const x = sumaMal(2, 3);   // x vale undefined (aunque en pantalla salga 5)
const y = sumaBien(2, 3);  // y vale 5
const z = sumaBien(2, 3) * 10; // 50: se puede seguir calculando

console.log está para que veas algo mientras depuras. return está para que el programa pueda seguir trabajando con el resultado. Si un ejercicio autocorregible te dice que esperaba 5 y recibió undefined, casi siempre es esto.

return corta la función

Todo lo que venga después de un return alcanzado no se ejecuta:

function clasificar(nota) {
  if (nota >= 9) {
    return "Sobresaliente";
  }
  if (nota >= 7) {
    return "Notable";
  }
  if (nota >= 5) {
    return "Aprobado";
  }
  return "Suspenso";
}

Esa propiedad es útil: en cuanto la respuesta está decidida, sales. No hacen falta else anidados y el código se lee de arriba abajo como una lista de casos. Compáralo con la versión con else if en condicionales y quédate con la que te resulte más legible; ambas son correctas.

También sirve para descartar casos imposibles al principio, lo que se llama salida temprana:

function promedio(notas) {
  if (notas.length === 0) return 0;   // caso límite fuera del camino principal

  let suma = 0;
  for (let i = 0; i < notas.length; i++) suma += notas[i];
  return suma / notas.length;
}

Devolver estructuras, no solo números

Una función puede devolver un array o un objeto, y eso es lo normal en cuanto el problema tiene más de un resultado:

function analizar(notas) {
  const suma = notas.reduce((acc, n) => acc + n, 0);
  const media = notas.length === 0 ? 0 : suma / notas.length;

  return {
    media: Math.round(media * 100) / 100,
    estado: media >= 6 ? "Aprobado" : "Suspenso",
  };
}

const resultado = analizar([7, 8, 6]);
console.log(resultado.media);   // 7
console.log(resultado.estado);  // "Aprobado"

Devolver un objeto con propiedades nombradas es mucho más claro que devolver un array de dos posiciones donde hay que recordar qué significa cada índice.

Errores típicos

  • Olvidar el return dentro de un bucle o un if. El camino que no devuelve nada acaba en undefined.

  • Poner el valor en la línea siguiente.

    return
      a + b;   // devuelve undefined: JavaScript cierra la instrucción en el salto de línea
  • Modificar el parámetro y no devolver nada. Si el ejercicio pide un array nuevo, devolver el original modificado incumple la especificación.

  • Devolver texto donde se espera número. return "10" no es return 10; revisa los tipos de datos.

Cómo se practica esto en el curso

Todos los ejercicios del curso se corrigen ejecutando tu función y comparando lo que devuelve con lo esperado, incluido el tipo del valor. Eso obliga a dominar return desde el módulo 2. El módulo 5 lo trata de forma explícita, con ejercicios como el validador de contraseñas o el generador de informes de ventas, donde hay que devolver objetos y arrays construidos por ti. Consulta el temario para verlo completo.

Preguntas frecuentes

¿Cuál es la diferencia entre return y console.log?

console.log escribe un mensaje en la consola para que lo lea una persona. return entrega un valor al código que llamó a la función, para poder seguir usándolo. Un test automático solo puede comprobar lo que se devuelve.

¿Puede una función tener varios return?

Sí, y suele quedar más claro: uno por caso, saliendo en cuanto la respuesta está decidida. Solo se ejecuta el primero que se alcanza, porque return termina la función.

¿Por qué mi función devuelve undefined?

Porque no llega a ningún return: o falta, o está dentro de un if que no se cumple, o hay un salto de línea entre return y el valor. Comprueba que todos los caminos del código devuelvan algo.