Elixir:
Рефакторинг
Как:
Давайте приведем в порядок общий паттерн Elixir. Мы отрефакторим функцию calculate_stats
, которая делает больше, чем следует, разделив ее на меньшие, переиспользуемые куски.
defmodule Stats do
# Исходный, не отрефакторенный код
def calculate_stats(data) do
total = Enum.sum(data)
count = Enum.count(data)
mean = total / count
{mean, total}
end
# Отрефакторенный код
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
# Пример вывода
# До рефакторинга
Stats.calculate_stats([1, 2, 3])
# => {2.0, 6}
# После рефакторинга
Stats.calculate_stats_refactored([1, 2, 3])
# => {2.0, 6}
Как вы можете видеть, вывод остается прежним, но теперь у нас есть модульные функции, которые можно использовать повторно и тестировать независимо друг от друга.
Глубокое погружение
Рефакторинг - это не новое понятие; он был критически важной частью программирования с самых ранних дней разработки программного обеспечения. Выдающиеся работы, такие как “Рефакторинг: улучшение дизайна существующего кода” Мартина Фаулера, предоставляют основополагающие практики для рефакторинга с ознакомлением, когда и как их применять.
Альтернативы ручному рефакторингу включают в себя инструменты автоматического анализа кода, которые могут предложить или даже выполнить рефакторинг. Однако автоматизированные инструменты не всегда могут понять полный контекст кода и могут упустить тонкости, которые бы заметил человек-рецензент.
Детали реализации в Elixir в частности включают понимание функционального парадигма и использование сопоставления с образцом, охраняющих выражений и оператора конвейера для написания четкого и лаконичного кода. Например, рефакторинг часто включает преобразование сложных императивных функций в меньшие, компонуемые функции, которые соответствуют предпочтениям Elixir для неизменяемости и операций без побочных эффектов.
См. также
Для получения более подробной информации о специфических техниках рефакторинга в Elixir:
- Официальные руководства Elixir
- “Рефакторинг: улучшение дизайна существующего кода” Мартина Фаулера, для общих принципов, которые могут быть применены к Elixir.
- Credo, статический инструмент анализа кода для Elixir, который поощряет лучшие практики.
- Трек Elixir на Exercism, для практических упражнений, которые часто включают рефакторинг.