Funciones y procedimientos
Las funciones y los procedimientos son bloques de código reutilizables que permiten organizar un programa en unidades independientes para realizar tareas concretas.
Ambos favorecen la modularidad, facilitan el mantenimiento del código y evitan la duplicidad de instrucciones.
La principal diferencia es que las funciones devuelven un valor, mientras que los procedimientos ejecutan acciones sin devolver un resultado.
Conceptos fundamentales
Para comprender las funciones y procedimientos es necesario conocer los siguientes conceptos:
- Subprograma: bloque de código independiente.
- Parámetro: dato que recibe el subprograma.
- Argumento: valor que se pasa al invocar el subprograma.
- Valor de retorno: resultado devuelto por una función.
- Ámbito (Scope): zona donde una variable es accesible.
- Llamada (Invocación): ejecución de una función o procedimiento.
¿Qué es una función?
Una función es un subprograma que realiza una operación y devuelve un resultado al programa que la invoca.
Ejemplo conceptual:
función sumar(a, b)
↓
calcula a + b
↓
devuelve resultado
Las funciones son especialmente útiles para realizar cálculos, validaciones y transformaciones de datos.
return.
¿Qué es un procedimiento?
Un procedimiento es un subprograma que ejecuta una serie de instrucciones, pero no devuelve un valor.
Normalmente se utiliza para realizar acciones como:
- Mostrar información.
- Guardar datos.
- Modificar registros.
- Enviar información.
- Inicializar variables.
Ejemplo conceptual:
procedimiento imprimirFactura()
↓
genera la factura
↓
la muestra por pantalla
Diferencias entre función y procedimiento
| Función | Procedimiento |
|---|---|
| Devuelve un valor | No devuelve valor |
| Puede utilizarse dentro de expresiones | No suele formar parte de expresiones |
Normalmente finaliza con return |
Finaliza al terminar sus instrucciones |
| Orientada al cálculo | Orientado a ejecutar acciones |
Parámetros y argumentos
Las funciones y procedimientos pueden recibir información desde el programa principal.
Ejemplo conceptual:
sumar(5, 8)
↓
Parámetros:
a
b
↓
Argumentos:
5
8
- Parámetro: variable definida en la función.
- Argumento: valor real enviado durante la llamada.
Paso de parámetros
Los parámetros pueden transmitirse de diferentes formas.
Paso por valor
La función recibe una copia del dato.
Los cambios realizados dentro del subprograma no afectan a la variable original.
Paso por referencia
La función recibe una referencia al dato original.
Las modificaciones realizadas sí afectan a la variable del programa principal.
Valor de retorno
Una función puede devolver un único resultado o, dependiendo del lenguaje, varios resultados.
Ejemplo conceptual:
Área = calcularArea(base, altura)
↓
Resultado
↓
Área = 25
El programa puede utilizar inmediatamente el valor devuelto.
Variables locales y globales
Las variables pueden tener diferente ámbito.
Variables locales
- Solo existen dentro de la función o procedimiento.
- Se destruyen al finalizar la ejecución.
Variables globales
- Son accesibles desde varias partes del programa.
- Permanecen disponibles durante toda la ejecución.
Ventajas de utilizar funciones
El uso de funciones aporta numerosos beneficios:
- Reutilización del código.
- Mayor legibilidad.
- Programas más modulares.
- Mantenimiento más sencillo.
- Reducción de errores.
- Facilidad para realizar pruebas.
Recursividad
Una función puede llamarse a sí misma.
Este mecanismo recibe el nombre de recursividad.
Ejemplo conceptual:
factorial(5)
↓
factorial(4)
↓
factorial(3)
↓
...
↓
Caso base
↓
Se resuelven las llamadas
Toda función recursiva debe disponer de:
- Caso base.
- Llamada recursiva.
Caso práctico
Situación
Una aplicación necesita calcular el IVA de cientos de facturas.
Solución
En lugar de repetir el cálculo en cada parte del programa:
- Se crea una función
calcularIVA(). - Se llama cada vez que sea necesario.
- El resultado devuelto se utiliza para generar la factura.
Con este enfoque:
- Se evita duplicar código.
- Se simplifica el mantenimiento.
- Se reducen los errores.
Ventajas e inconvenientes
Ventajas
- Código reutilizable.
- Menor duplicidad.
- Programas más organizados.
- Mejor mantenimiento.
- Mayor facilidad para localizar errores.
- Favorecen el trabajo en equipo.
Inconvenientes
- Exceso de fragmentación si se crean demasiadas funciones pequeñas.
- Mayor complejidad en programas muy grandes.
- Posible sobrecoste de llamadas en aplicaciones críticas de rendimiento.
Errores habituales
- Confundir función con procedimiento.
- No distinguir parámetros de argumentos.
- Confundir paso por valor con paso por referencia.
- Abusar de variables globales.
- Olvidar devolver un valor en una función.
- Crear funciones excesivamente largas.
Cómo evitarlos
- Recordar que las funciones devuelven un resultado.
- Diferenciar claramente parámetros y argumentos.
- Comprender el ámbito de las variables.
- Dividir el programa en módulos pequeños y coherentes.
- Utilizar variables globales únicamente cuando sea necesario.
Relaciones con otros temas
Las funciones y procedimientos están estrechamente relacionados con:
- Programación estructurada.
- Algoritmos.
- Variables.
- Tipos de datos.
- Ámbito de variables (Scope).
- Recursividad.
- Programación modular.
- Programación orientada a objetos.
- Gestión de memoria.
Conceptos clave para recordar
[!NOTE]
- Una función devuelve un valor.
- Un procedimiento ejecuta acciones sin devolver un resultado.
- Los parámetros aparecen en la definición; los argumentos se proporcionan durante la llamada.
- El paso de parámetros puede realizarse por valor o por referencia.
- Las variables locales solo existen dentro del subprograma; las globales pueden utilizarse desde diferentes partes del programa.
- La recursividad consiste en que una función se invoque a sí misma y requiere siempre un caso base.
- Las funciones y procedimientos favorecen la modularidad, la reutilización del código y el mantenimiento de las aplicaciones.