Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Programación orientada a datos con Python, Unidad 5 — Funciones orientadas al procesamiento de datos, 5.1 — Funciones puras para datos ·

Evitar efectos secundarios

Evitar efectos secundarios: Mejorando la puridad de las funciones

Introducción

En el desarrollo de programas orientados a datos, una práctica fundamental es escribir funciones puras. Una función pura es aquella que, dado un conjunto fijo de entrada, siempre produce la misma salida y no tiene efectos secundarios fuera de su ámbito (como modificaciones en variables globales o archivos). En este artículo, exploraremos por qué las funciones puras son importantes para el procesamiento de datos y cómo evitar sus efectos secundarios.

Explicación principal con ejemplos

Las funciones puras aportan varias ventajas al desarrollador. Primariamente, facilitan la comprensión del código y su mantenimiento, ya que cada función tiene un solo propósito y su comportamiento es predecible. Además, son fundamentales para la paralelización y el cacheo en procesos de análisis de datos.

Ejemplo: Cálculo de media

Imaginemos una función que calcula la media de una lista de números:

def calcular_media(numbers):
    total = sum(numbers)
    return total / len(numbers)

Esta función es pura porque, dado un conjunto fijo de numbers, siempre devuelve la misma media. Sin embargo, podríamos mejorarla para evitar posibles efectos secundarios.

Ejemplo mejorado: Cálculo de media sin modificar variables globales

def calcular_media(numbers):
    if not numbers:
        return 0
    total = sum(numbers)
    count = len(numbers)
    return total / count

En este caso, no hay variables globales ni efectos secundarios fuera del ámbito local. La función es pura y su comportamiento es predecible.

Errores típicos / trampas

Aunque las funciones puras son una buena práctica, a menudo caemos en algunas trampas que pueden hacerlas menos eficaces o incluso perjudiciales. Aquí te presentamos tres de ellas:

  1. Modificación de parámetros por referencia: Si los parámetros son listas o diccionarios, cambiarlos puede afectar a las variables globales si no se manejan correctamente.
  1. Acceso a variables globales: Las funciones que dependen de variables globales pueden ser difíciles de entender y mantener, ya que su comportamiento puede depender del contexto en el que se ejecutan.
  1. Modificación de estado interno: Algunas estructuras de datos internas pueden verse afectadas por métodos inmutables o mutables. Es importante asegurarse de que los cambios internos no tengan efectos secundarios fuera del ámbito local.

Checklist accionable

Aquí tienes algunos puntos clave para asegurar la puridad de tus funciones:

  1. Evita modificar parámetros: Si necesitas cambiar el valor de un parámetro, considera devolver una nueva copia con los cambios.
  2. No use variables globales: Dependencia de variables globales puede hacer que tu código sea difícil de entender y mantener.
  3. Maneja bien las excepciones: Trata las excepciones dentro de la función para no interferir con el estado del sistema.
  4. Documenta claramente: Asegúrate de documentar cuáles son los parámetros y qué se espera como salida.
  5. Evita efectos secundarios: Mantén tus funciones centradas en una tarea única, evitando interacciones con otros componentes del sistema.

Cierre: Siguientes pasos

Siguientes pasos

  • Revisa tus funciones actuales: Evalúa cada función que hayas escrito y asegúrate de que esté cumpliendo con las mejores prácticas.
  • Practica el uso de parámetros inmutables: Trabaja más con listas, tuplas o diccionarios inmutables para evitar efectos secundarios indeseados.
  • Integra pruebas unitarias: Asegúrate de que cada función funcione correctamente en un entorno controlado.

Escribir funciones puras es una buena práctica fundamental en la programación orientada a datos. No solo mejora la claridad y el mantenimiento del código, sino que también facilita su paralelización y optimización.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).