変数の抽出
式に名前を付けること
https://refactoring.com/catalog/extractVariable.html
写経 https://github.com/ftnext/refactoring-py/blob/bde37515e3ee856273ce556b64b4c3e5ad57a6e1/chapter6/extract_variable.py
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
クラスのコンテキストの場合(変数の抽出)
オブジェクトが共通に振る舞うよう、メソッドとして抽出する
https://nikkie-ftnext.hatenablog.com/entry/vscode-extract-easy-refactoring を書いた
他書の例
8章 巨大な式を分割する(『リーダブルコード』)
説明用の変数の導入(第1章 小さくまとめてわかりやすくする 増田本)
説明用の変数はローカル変数の使い回しではなく、個別に用意する(ここで紹介したようになる)