Python上級

上級 Pythonで学ぶリファクタリング|練習問題編

導入

リファクタリングは、既存のコードを改善するための手法であり、特に大規模なプロジェクトでは、その重要性が増します。ここでは、実際の業務における具体的なシチュエーションとして、複雑な条件分岐を含むコードを改善するケースを取り上げます。このケースでは、可読性や保守性の向上を目指します。

教科書レベルの解説(リファクタリング)

重要な概念の整理

リファクタリングの基本的な目的は、コードの構造を変更して、機能を変えずに品質を向上させることです。特に、複雑な条件分岐が多く含まれる場合、コードの可読性が低下し、バグを生むリスクが高まります。このような場合、条件分岐を整理し、メソッドを分割することで、コードの理解が容易になります。

コード例(Python)


def calculate_discount(price, customer_type):
    if customer_type == 'regular':
        return price * 0.9
    elif customer_type == 'premium':
        return price * 0.8
    elif customer_type == 'vip':
        return price * 0.7
    else:
        return price

コードの行ごとの解説

  1. 最初の行で、価格と顧客タイプを引数として受け取る関数を定義しています。
  2. 条件分岐を用いて、顧客タイプに応じた割引率を適用していますが、条件が増えると可読性が低下します。
  3. 最後の行では、どの顧客タイプでもない場合に元の価格を返しています。

練習問題編

以下の練習問題に取り組み、リファクタリングのスキルを磨いてください。

  1. 問題1: 上記のコードをリファクタリングし、顧客タイプごとの割引率を辞書を使って管理してください。
  2. 問題2: 割引計算を別の関数に分離し、再利用できる形にしてください。
  3. 問題3: 顧客タイプが不正な場合には例外を投げるようにしてください。
  4. 問題4: 新たに「新規顧客」の割引を追加し、全体のコードを更新してください。
  5. 問題5: リファクタリング後のコードの可読性について、具体的な改善点を述べてください。

まとめ

  • 複雑な条件分岐は可読性を低下させるため、リファクタリングが有効です。
  • 辞書や関数の分割を用いることで、コードの保守性を向上させることができます。