Lógica de ProgramaciónIntermedio· 10 min de lectura

Funciones y Modularización

Las funciones son bloques de código reutilizables con nombre propio. Aprende a crear funciones con parámetros y retorno, entiende el alcance y el principio DRY.

RF

Renato Freitas

Actualizado el 5 de mayo de 2026

Por qué existen las funciones

Imagina que necesitas calcular el IMC (Índice de Masa Corporal) de 50 personas distintas en el mismo programa. Sin funciones, repetirías la misma fórmula 50 veces. Si descubres que la fórmula estaba mal, tendrías que corregirla en 50 lugares. Con una función, escribes la lógica una vez, le das un nombre y la llamas cuantas veces necesites.

Esa es la esencia del principio DRY: Don't Repeat Yourself (No Te Repitas). El código duplicado es código que necesita mantenerse en múltiples lugares. Un cambio en un sitio no se propaga a los demás, creando inconsistencias y errores.

Además de la reutilización, las funciones mejoran la legibilidad. Un programa que llama a 'calcularDescuento(precio, categoria)', 'validarRFC(rfc)' y 'enviarEmail(destinatario, mensaje)' es mucho más fácil de entender que un bloque monolítico de 200 líneas sin divisiones.

🧮 Pruébalo tú mismo — CalcSim

¿Quieres más funciones? Descargar app CalcSim IA

Anatomía de una función

Una función tiene cuatro componentes: nombre (identificador por el que se llama), parámetros (datos de entrada, opcionales), cuerpo (bloque de instrucciones que se ejecuta) y valor de retorno (resultado que devuelve la función, opcional).

Pseudocódigo de una función que calcula el área de un rectángulo: FUNCIÓN calcularArea(ancho, alto) → RETORNAR ancho * alto. Para usarla: area = calcularArea(5, 3). El resultado 15 se asigna a la variable 'area'.

Los parámetros son las 'entradas' de la función — valores que se pasan cuando se llama. Dentro de la función, se comportan como variables locales. El valor de retorno es la 'salida' — el resultado que produce la función. Una función sin retorno (void) ejecuta acciones sin producir un valor (como mostrar texto en pantalla).

Funciones void versus funciones con retorno

Las funciones void (sin retorno) realizan acciones: mostrar datos, modificar variables globales, guardar archivos, enviar correos. Su objetivo es el efecto secundario, no producir un valor.

Las funciones con retorno calculan y devuelven un resultado. Son como fórmulas matemáticas: dado un conjunto de entradas, producen una salida determinista. Son más fáciles de probar (proporcionas entradas y verificas si la salida es correcta) y más fáciles de reutilizar (el resultado puede pasarse a otras funciones).

Una buena práctica es preferir funciones con retorno a funciones que modifiquen variables globales. Esto hace el flujo de datos explícito y el código más predecible.

Alcance: variables locales y globales

El alcance define dónde existe una variable y dónde puede accederse. Una variable local existe solo dentro de la función donde fue creada — cuando la función termina, la variable deja de existir. Una variable global existe en todo el programa y puede ser accedida por cualquier función.

El uso excesivo de variables globales es un problema clásico. Cualquier función puede modificarlas en cualquier momento, haciendo difícil rastrear quién cambió qué. Los errores causados por variables globales modificadas inesperadamente son notoriamente difíciles de encontrar.

La regla general es minimizar el alcance de las variables: declararlas en el nivel más interno posible. Si una variable solo se usa dentro de una función, declárala allí, no en el alcance global.

Modularización y pensamiento en problemas

Modularizar significa dividir un problema grande en problemas más pequeños e independientes, cada uno resuelto por una función. Este enfoque se llama descomposición funcional.

Un programa de registro de clientes puede descomponerse en: validarDatos(), guardarEnBaseDeDatos(), enviarEmailDeConfirmacion(), generarReporte(). Cada función tiene una responsabilidad clara y puede desarrollarse, probarse y corregirse de forma independiente.

Esta mentalidad de descomponer problemas en partes más pequeñas es aplicable mucho más allá de la programación. Cualquier proyecto complejo — una tesis, un evento, un producto — puede beneficiarse de pensar en módulos independientes con interfaces claras entre sí.

Preguntas frecuentes

¿Una función puede llamar a otra función?

Sí, y es muy común y deseable. Las funciones que llaman a otras forman una jerarquía de abstracción. Una función de alto nivel como 'procesarPedido()' puede llamar a 'validarStock()', 'calcularEnvio()' y 'actualizarInventario()', cada una con su responsabilidad específica.

¿Qué es una función recursiva?

Una función que se llama a sí misma. Es útil para problemas naturalmente recursivos como calcular factoriales, recorrer árboles y dividir-y-conquistar. Toda función recursiva necesita una condición de parada (caso base) para evitar el bucle infinito.

¿Cuántas líneas debe tener una función?

No hay una regla absoluta, pero las funciones de menos de 20–30 líneas tienden a ser más fáciles de entender y probar. Si una función está creciendo mucho, probablemente esté haciendo más de una cosa y puede dividirse en funciones más pequeñas.

¿Qué es la sobrecarga de función?

La sobrecarga (overloading) es cuando varias funciones tienen el mismo nombre pero distintos parámetros. El compilador elige qué versión llamar según los tipos de los argumentos. Por ejemplo, 'sumar(int, int)' y 'sumar(float, float)' pueden ser dos funciones distintas con el mismo nombre.

¿Este artículo te fue útil?

Califica con estrellas para ayudarnos a mejorar el contenido.

Inicia sesión para calificar este artículo.

¿Aún tienes dudas?

El Profesor IA explica paso a paso

Haz una pregunta en lenguaje natural y recibe una explicación personalizada sobre Lógica de Programación — o cualquier otro tema.

¿Prefieres resolverlo en el móvil?

Descargar la app gratis →

Sigue aprendiendo