導入
リファクタリングは、既存のコードを改善し、可読性や保守性を向上させる手法です。特に大規模なプロジェクトでは、コードの複雑さが増し、変更が難しくなることがあります。このセクションでは、特定のシチュエーションにおけるリファクタリングの重要性を探り、実践的なアプローチを学んでいきます。
教科書レベルの解説(リファクタリング)
重要な概念の整理
リファクタリングは単なるコードの整理ではなく、システム全体の設計を見直す機会でもあります。特に、重複コードや長いメソッドは、後々のバグの温床となることが多いです。リファクタリングの際には、以下のポイントを考慮します:
- コードの重複を削減する
- メソッドを短く保つ
- 変数名や関数名を明確にする
- テストカバレッジを確保する
コード例(Python)
def calculate_discounted_price(price, discount):
if discount > 0:
return price - (price * discount / 100)
return price
def calculate_total(prices, discount):
total = 0
for price in prices:
total += calculate_discounted_price(price, discount)
return total
コードの行ごとの解説
- 最初の関数は、割引後の価格を計算します。
- 割引がない場合は、元の価格を返します。
- 次の関数では、複数の価格に対して割引を適用し、合計を計算します。
- このコードは機能しますが、重複したロジックや可読性の問題があります。
練習問題編
以下の練習問題に取り組んで、リファクタリングの理解を深めてください。
- 問題1: 上記のコードをリファクタリングして、重複コードを削除してください。
- 問題2: 変数名や関数名をより明確に変更してください。
- 問題3: テストケースを追加して、リファクタリング後のコードが正しく動作することを確認してください。
模範解答と解説
以下に問題の模範解答とその解説を示します。
- 解答1:
def apply_discount(price, discount): return price - (price * discount / 100) if discount > 0 else price def calculate_total(prices, discount): return sum(apply_discount(price, discount) for price in prices)このリファクタリングにより、割引適用のロジックが一つの関数に集約され、可読性が向上しました。
- 解答2: 上記の解答で、関数名をより明確にすることで、意図が伝わりやすくなりました。
- 解答3: テストケースの例:
def test_apply_discount(): assert apply_discount(100, 20) == 80 assert apply_discount(100, 0) == 100このテストにより、リファクタリング後のコードが期待通りに動作することを確認できます。
まとめ
- リファクタリングは、コードの可読性と保守性を向上させる重要な手法です。
- 重複コードの削減や明確な命名が、リファクタリングの鍵となります。