Saltar al contenido principal

Code Smells en Programación Funcional

La programación funcional tiene un enfoque diferente, con énfasis en inmutabilidad, funciones puras y composición de funciones.

3.1. Smells en Programación Funcional

Efectos Secundarios Ocultos: Funciones que se presentan como puras pero modifican estado Funciones Impuras Mezcladas: No separar claramente las funciones con efectos secundarios Mutabilidad Innecesaria: Usar variables mutables cuando no es necesario Recursión Ineficiente: Recursión que podría causar desbordamiento de pila Operaciones Repetitivas sobre Colecciones: Múltiples pasadas sobre la misma colección

3.2. Ejemplo: Efectos Secundarios Ocultos

let globalCounter = 0;

function processItems(items) {
return items.map(item => {
globalCounter++; // Efecto secundario oculto
return item.value * 2;
});
}

Refactorización (separando efectos secundarios):

function processItems(items) {
return items.map(item => item.value * 2);
}

function countProcessedItems(items) {
return items.length;
}

// Uso
const items = [{value: 1}, {value: 2}, {value: 3}];
const processedItems = processItems(items);
const count = countProcessedItems(items);
globalCounter += count;

3.3. Ejemplo: Recursión Ineficiente vs Recursión de Cola

def factorial(n: Int): Int = {
if (n <= 1) 1
else n * factorial(n - 1) // Puede causar desbordamiento de pila
}
def factorial(n: Int): Int = {
@annotation.tailrec
def factorialAcc(acc: Int, n: Int): Int = {
if (n <= 1) acc
else factorialAcc(acc * n, n - 1) // Optimizable por el compilador
}

factorialAcc(1, n)
}