Elixir:
Refactorización
Cómo hacerlo:
Vamos a organizar un patrón común de Elixir. Vamos a refactorizar una función calculate_stats
que hace más de lo que debería dividiéndola en piezas más pequeñas y reutilizables.
defmodule Stats do
# Código original, sin refactorizar
def calculate_stats(data) do
total = Enum.sum(data)
count = Enum.count(data)
mean = total / count
{mean, total}
end
# Código refactorizado
def calculate_mean(data), do: Enum.sum(data) / Enum.count(data)
def calculate_total(data), do: Enum.sum(data)
def calculate_stats_refactored(data) do
mean = calculate_mean(data)
total = calculate_total(data)
{mean, total}
end
end
# Salida de muestra
# Antes de Refactorizar
Stats.calculate_stats([1, 2, 3])
# => {2.0, 6}
# Después de Refactorizar
Stats.calculate_stats_refactored([1, 2, 3])
# => {2.0, 6}
Como puedes ver, la salida sigue siendo la misma, pero ahora tenemos funciones modulares que pueden ser reutilizadas y probadas de forma independiente.
Profundización
Refactorizar no es un concepto nuevo; ha sido una parte crucial de la programación desde los primeros días del desarrollo de software. Obras notables, como “Refactoring: Improving the Design of Existing Code” de Martin Fowler, proporcionan prácticas fundamentales para la refactorización con insights sobre cuándo y cómo aplicarlas.
Las alternativas a la refactorización manual incluyen herramientas automatizadas de análisis de código, que pueden sugerir o incluso realizar refactorizaciones. Sin embargo, las herramientas automatizadas no siempre pueden comprender el contexto completo del código y pueden perder sutilezas que un revisor humano captaría.
Los detalles de implementación en Elixir específicamente incluyen entender el paradigma funcional y aprovechar el emparejamiento de patrones, cláusulas de guardia, y el operador de tubería para escribir código claro y conciso. Por ejemplo, la refactorización a menudo implica convertir funciones complejas de estilo imperativo en funciones más pequeñas, componibles que siguen la preferencia de Elixir por la inmutabilidad y las operaciones sin efectos secundarios.
Ver También
Para más sobre técnicas de refactorización específicas de Elixir:
- Guías oficiales de Elixir
- “Refactoring: Improving the Design of Existing Code” de Martin Fowler, para principios generales que se pueden aplicar a Elixir.
- Credo, una herramienta de análisis de código estático para Elixir que fomenta las mejores prácticas.
- Pista de Elixir en Exercism, para ejercicios prácticos que a menudo involucran la refactorización.