Módulo 2 · Fundamentos de Programación

Qué es una función

Una función es un bloque de código con nombre que recibe datos y devuelve un resultado. Cómo se declara, cuándo crear una y los errores más habituales.

Definición rápida

Una función es un bloque de código con nombre que recibe datos de entrada, ejecuta una tarea concreta y devuelve un resultado reutilizable.

Una función es un bloque de código con nombre que recibe unos datos, hace algo con ellos y devuelve un resultado. Es la herramienta con la que se parte un problema grande en piezas pequeñas que se pueden entender, probar y arreglar por separado. Sin funciones, un programa de cierto tamaño se vuelve imposible de mantener.

Anatomía de una función

function calcularTotal(precio, cantidad) {
  const subtotal = precio * cantidad;
  return subtotal;
}

const total = calcularTotal(20, 3); // 60

Cuatro partes:

  • Nombre: calcularTotal. Un verbo, porque una función hace algo.
  • Parámetros: precio y cantidad, los datos que necesita para trabajar.
  • Cuerpo: lo que hay entre llaves, la tarea.
  • Retorno: return subtotal, el resultado que entrega a quien la llamó.

Declararla no ejecuta nada. La función solo actúa cuando la llamas con datos concretos, y puedes llamarla tantas veces como quieras con datos distintos.

Por qué son la pieza central

Compara. Sin funciones, calculando el total de tres pedidos:

const total1 = 20 * 3 + 20 * 3 * 0.21;
const total2 = 15 * 2 + 15 * 2 * 0.21;
const total3 = 40 * 1 + 40 * 1 * 0.21;

Si el IVA cambia, hay que corregir tres sitios y es fácil olvidar uno. Con función:

function totalConIva(precio, cantidad) {
  const iva = 0.21;
  return precio * cantidad * (1 + iva);
}

const total1 = totalConIva(20, 3);
const total2 = totalConIva(15, 2);
const total3 = totalConIva(40, 1);

Un solo sitio donde está la regla, un solo sitio donde corregirla y un nombre que explica qué se está calculando. Eso es modularidad, y es la diferencia entre código que se puede mantener y código que da miedo tocar.

Una función, una responsabilidad

La regla más útil al empezar: si al describir lo que hace tu función necesitas la palabra «y», probablemente sean dos funciones.

// hace dos cosas: calcular y mostrar
function procesarNotas(notas) {
  let suma = 0;
  for (let i = 0; i < notas.length; i++) suma += notas[i];
  console.log("Promedio:", suma / notas.length);
}

// mejor: calcular es una cosa, mostrar es otra
function promedio(notas) {
  let suma = 0;
  for (let i = 0; i < notas.length; i++) suma += notas[i];
  return suma / notas.length;
}

console.log("Promedio:", promedio([7, 8, 9]));

La segunda versión se puede reutilizar en cualquier contexto y se puede comprobar automáticamente, porque devuelve un valor en lugar de imprimirlo. Todos los ejercicios autocorregibles del curso funcionan así por ese motivo.

Errores típicos al empezar

  • Imprimir en vez de devolver. console.log muestra, pero no entrega el dato. Si un test espera 10, un console.log(10) sin return devuelve undefined y falla.
  • Olvidar llamar a la función. Se declara, se ejecuta el archivo y no pasa nada.
  • Usar variables de fuera en lugar de parámetros. La función deja de ser reutilizable y su resultado depende de un estado invisible.
  • Poner código después del return. No se ejecuta nunca: return termina la función en ese instante.
  • Nombres vagos. hacerCosas, funcion1, datos2. Si el nombre no dice qué devuelve, algo va mal en el diseño.

Cómo se practica esto en el curso

El módulo 2 introduce funciones y los ejercicios «Saludar», «Calcular propina y total» y «La hipotenusa» las ponen en uso desde el primer día. El módulo 5 va a fondo: parámetros, valores de retorno, alcance de las variables, varias funciones colaborando y funciones en archivos separados. El temario tiene la lista completa.

Preguntas frecuentes

¿Cuándo debo crear una función?

Cuando un bloque de código hace algo que puedes nombrar con un verbo, cuando lo vas a repetir o cuando quieres poder probarlo por separado. Si necesitas un comentario para explicar qué hace un trozo de código, ese trozo quiere ser una función.

¿Qué diferencia hay entre declarar y llamar a una función?

Declararla es definir qué hace; llamarla es ejecutarla con unos datos concretos. Una función declarada y nunca llamada no ejecuta nada.

¿Una función puede no devolver nada?

Sí. Si no tiene return, devuelve undefined. Es válido para funciones que solo muestran algo por pantalla, pero para calcular siempre conviene devolver el resultado en lugar de imprimirlo.