Parte 5 — Funciones y modularidad

⏮️ Parte 4 · ⬅️ Programa · 📚 Índice · ⏭️ Parte 6

16 clases · rango 073–088 · clases de código · nivel intermedio · ~40 h (cronograma)

🧭 La función como contrato: firma, paso de parámetros, cierres y fronteras de módulo.


🧭 De qué trata esta parte

La función es la primera herramienta de abstracción real: permite dar nombre a un proceso y, con ese nombre, dejar de pensar en cómo está hecho. Esta parte la estudia como contrato —qué promete la firma y qué garantiza— y no como una forma de ahorrar líneas repetidas.

La sección más importante es la que casi todos los cursos despachan en un párrafo: qué recibe realmente una función. Paso por valor, paso por referencia y el modelo de propiedad y préstamo de Rust son tres respuestas incompatibles a la misma pregunta, y verlas juntas resuelve de una vez la confusión sobre por qué a veces «se modifica afuera» y a veces no.

Después vienen los nombres —alcance, sombreado, cierres, pureza— y el salto de la función al módulo: fronteras, visibilidad e importación. Es el punto en que el curso deja de hablar de programas de un archivo y empieza a hablar de proyectos.

🎒 Qué necesitas traer

Las Partes 3 y 4. La mutabilidad (054) y el control de flujo son requisito directo; los genéricos (078) se apoyan en el sistema de tipos de la Parte 3.

🎯 Qué sabrás hacer al terminar

Resultados comprobables: si no puedes hacerlos, la parte no está cerrada.

  1. Leer una firma como un contrato y detectar qué no promete.
  2. Predecir si una función puede modificar el argumento que recibió, en cada uno de los diez lenguajes.
  3. Explicar movimiento y préstamo de Rust comparándolos con copia y referencia.
  4. Escribir una función genérica y explicar el coste de su implementación en cada lenguaje.
  5. Identificar qué captura un cierre y por qué eso cambia el resultado del programa.
  6. Organizar un proyecto en módulos con fronteras y visibilidad explícitas.

🗺️ El recorrido, clase a clase

Las clases están agrupadas en bloques por la razón que las une. El orden es secuencial: cada una asume la anterior.

🔹 La firma como contrato · clases 073–078

Parámetros, valores por defecto, argumentos nombrados, variádicos, retornos múltiples y genéricos.

🔹 Qué recibe realmente la función · clases 079–081

Las tres respuestas al paso de parámetros: valor, referencia y propiedad.

🔹 Dónde viven los nombres · clases 082–085

Alcance, sombreado, cierres, pureza y la función como valor de primera clase.

🔹 De la función al proyecto · clases 086–088

Módulos, visibilidad, encapsulación e importación: las fronteras del código propio.

⚠️ Los malentendidos que esta parte corrige

Se suele creer Lo que ocurre en realidad
«En Java los objetos se pasan por referencia.» Se pasa por valor la referencia. La diferencia se nota en cuanto reasignas el parámetro dentro de la función.
«Un cierre es solo una función anónima.» Lo que lo define no es no tener nombre, sino llevarse consigo el entorno donde nació.
«private es una regla de cortesía.» Es el mecanismo que permite dar por ciertos los invariantes de un tipo. Sin él, no hay nada que garantizar.

🧪 Cómo estudiar esta parte

  1. Lee el modelo y el pseudocódigo primero. Si entiendes el algoritmo neutral, las diez implementaciones son diez traducciones, no diez problemas.
  2. Lee las diez implementaciones, no solo la de tu lenguaje. El aprendizaje está en el contraste: ahí se distingue lo esencial del accidente sintáctico.
  3. Ejecuta el verificador (python scripts/verificar_equivalencia.py NNN) y comprueba tú mismo que coinciden. Fuerza después un caso límite y observa quién se rompe primero.
  4. Lee primos.md para ver el mismo programa en la familia de cada lenguaje: es donde el concepto deja de estar atado a diez nombres concretos.
  5. Haz el reto de transferencia. Portarlo a un lenguaje que no dominas es la única prueba real de que aprendiste el concepto y no la sintaxis.

📚 Fuentes de referencia de esta parte

Cada clase cita estos libros en su sección de referencias. No se reproduce su contenido: la redacción es original.

🔗 Qué abre esta parte

Con funciones y módulos, la Parte 6 se ocupa de lo que esas funciones manipulan: las estructuras de datos.


⏮️ Parte 4 · ⬅️ Programa · 📚 Índice · ⏭️ Parte 6