変数の抽出
式に名前を付けること
code:リファクタリング前.py
def price(order):
# price = base price - quantity discount + shipping
return (
order.quantity * order.item_price
- max(0, order.quantity - 500) * order.item_price * 0.05
+ min(order.quantity * order.item_price * 0.1, 100)
)
手順(手順の後に毎回テストを走らせる)
base_price変数を導入
(非常に小さいステップ。間違いがないことを確認しながら進む)
2箇所の内1箇所をbase_priceで置き換え
エディタの「Extract Variable」機能で1手順にまとめられる
2箇所ともbase_priceで置き換え
quantity_discount引数を導入して置き換え
shippint引数を導入して置き換え + 変数で明確になったのでコメントが不要になる
code:リファクタリング後.py
def price(order):
base_price = order.quantity * order.item_price
quantity_discount = max(0, order.quantity - 500) * order.item_price * 0.05
shipping = min(base_price * 0.1, 100)
return base_price - quantity_discount + shipping
オブジェクトが共通に振る舞うよう、メソッドとして抽出する
他書の例
説明用の変数はローカル変数の使い回しではなく、個別に用意する(ここで紹介したようになる)