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}
出力は同じままですが、今では独立してテストしやすいモジュラーな関数ができています。
深掘り
リファクタリングは新しい概念ではありません。ソフトウェア開発初期の頃からプログラミングの重要な部分でした。マーティン・ファウラーの「Refactoring: Improving the Design of Existing Code」などの著名な作品は、リファクタリングに対する基礎的な実践とそれらをいつ、どのように適用するかについての洞察を提供しています。
手動リファクタリングの代替手段には、リファクタリングを提案あるいは実行することができる自動コード分析ツールが含まれます。しかし、自動ツールは常にコードの完全なコンテキストを把握するわけではなく、人間のレビュアーが捉えることができる微妙な違いを見逃すことがあります。
Elixirにおける実装の詳細には、関数型パラダイムを理解し、パターンマッチング、ガード句、パイプ演算子を活用して、明瞭かつ簡潔なコードを記述することが含まれます。例えば、リファクタリングは、しばしば複雑な命令形式の関数を、Elixirが好むイミュータビリティと副作用のない操作に従うより小さく、組み合わせ可能な関数に変換することを含みます。
参照
Elixir固有のリファクタリング技術についての詳細は:
- Elixirの公式ガイド
- マーティン・ファウラーの「Refactoring: Improving the Design of Existing Code」、Elixirに適用できる一般原則について。
- Credo, Elixirのための静的コード分析ツール、ベストプラクティスを推奨します。
- Exercism Elixir Track、リファクタリングを含む実践的な演習のために。