En este artículo veremos funciones (y también procedimientos). Estos componentes son los ladrillos fundamentales para construir software escalable y mantenible.
# Divide y vencerás (funciones)
Con esta frase “divide y vencerásâ€, atribuida a Julio César, los romanos encontraron una estrategia sumamente efectiva para la política y la guerra.
Esta es una idea que también se aplica a la resolución de problemas. Dado un problema complejo lo dividimos en partes o subproblemas, más simples de resolver.
Una vez encontrada la solución de cada una de las partes, o subproblemas, las combinamos y resolvemos el problema principal.
Llamamos módulo a cada parte, y a todo el proceso, modularización. Cada módulo resuelve algunos de los subproblemas que conforman el problema original.
info Nota técnica: Modularidad y Acoplamiento
La modularización no solo simplifica la lógica, sino que permite gestionar el acoplamiento (la dependencia entre módulos) y la cohesión (qué tan enfocada está una función en una sola tarea). Un buen diseño modular reduce la deuda técnica del proyecto.
# Funciones
Las funciones son bloques de código que realizan tareas específicas. Dividen tareas grandes en varias tareas más pequeñas, y permite reutilizar lo que ya hicimos, o incluso lo que otros hicieron, en lugar de comenzar de cero.
# Estructura de las funciones
Una función tiene la forma:
El nombre de la función, el tipo de dato que retorna y entre paréntesis los parámetros, separados con “,†cada uno con su tipo.
Finalmente retorna el resultado para el invocador.
# Parámetros y Variables
Los parámetros son variables usadas para meter datos adentro de la función, porque la función no conoce lo que está afuera, solo conoce lo que se declara adentro y los parámetros.
tipo_retorno nombre_funcion()
? Variables globales
Hay variables que se declaran por fuera son variables globales, se pueden usar en cualquier parte del programa. En programación se recomienda no usar, o usar lo menos posible variables globales para evitar efectos colaterales inesperados (Side Effects).
# Procedimientos
Hay funciones que no retornan valor, en ese caso el tipo retorno es void. Son llamados procedimientos, se ocupan de alguna tarea pero no retornan nada.
void nombre_funcion (params)
# Ejemplo: Función Suma
Falta armar el programa principal, carga los datos, invoca a la función suma e imprime el resultado.
# Pasaje de parámetros
Existen dos tipos de pasaje por parámetros: Valor y Referencia.
Por Valor
// Copia del dato, no afecta original.
Por Referencia
// Dirección de memoria, modifica original.
# Ejercicios de Práctica
Crea una función conversor (moneda, cantidad) para libras, dólares y yenes.
DECIMAL conversor (PALABRA moneda, DECIMAL cantidad)
INICIO
DECIMAL tasaConversion
SI (moneda == "libra") ENTONCES
tasaConversion = 1.22
SINO SI (moneda == "dolar") ENTONCES
tasaConversion = 0.75
SINO SI (moneda == "yen") ENTONCES
tasaConversion = 0.009
SINO
INICIO
IMPRIMIR "Moneda no válida"
RETORNA -1
FIN
RETORNA cantidad * tasaConversion
FIN
Calcula el jornal según turno diurno/nocturno y bonificaciones de fin de semana.
DECIMAL calcularJornal (ENTERO horas, PALABRA turno, PALABRA dia)
INICIO
DECIMAL tarifaBase, incremento, tarifaFinal
SI (turno == "nocturno") ENTONCES
tarifaBase = 12; incremento = 0.15
SINO
tarifaBase = 10; incremento = 0.10
SI (dia == "sabado" O dia == "domingo") ENTONCES
tarifaFinal = tarifaBase + (tarifaBase * incremento)
SINO
tarifaFinal = tarifaBase
RETORNA horas * tarifaFinal
FIN