リファクタを任せる
リファクタは外から見て何も変わらない
リファクタは、外から見た動きを変えずに、中の書き方だけを整える作業です。整理した結果として動きが変わったなら、それはリファクタではなく仕様変更です。
この性質があるので、AI に頼むときの合言葉は決まっています。
プレーンテキスト
動作は変えないでください。戻り値が変わってはいけません。書かないと、AI は「ついでに改善」をします。丸め方を変えたり、エラー時の戻り値を None から空の辞書に変えたり。良かれと思っての変更ですが、呼び出し側は壊れます。
重複はバグの温床
同じ計算が2か所に書かれていると、片方だけ直して片方を忘れる事故が起きます。
Python
def total_expense(records):
return sum(r["amount"] for r in records if r["type"] == "expense")
def total_income(records):
return sum(r["amount"] for r in records if r["type"] == "expence")2つ目の綴りが違います。コピーして直し忘れた、典型的な形です。重複を1つにまとめれば、こういう食い違いはそもそも起きません。重複を消す本当の理由は、行数ではなく、直し漏れを無くすことです。
整理の前にテストを用意する
動作が変わっていないことを、どうやって確かめるでしょうか。目で読んで確かめるのは無理です。整理の前後で同じテストが通ることを見るのがいちばん確実です。
このコースの演習では、テストはあらかじめ用意されています。実務では、リファクタの前にテストを書かせてから整理を頼むという順序になります。テストが無い状態で大きく整理させるのは、命綱なしで屋根に登るのと同じです。
頼み方の例
プレーンテキスト
kakeibo.py の集計処理に重複があります。共通部分を1つの関数にまとめてください。
ただし各関数の戻り値は変えないでください。「まとめて」だけだと、AI は関数の数まで減らそうとして、公開している名前を消すことがあります。残してほしい関数名は明示してください。
今回の演習
支出と収入の合計を出す2つの関数があります。中身がほぼ同じで、しかも片方が綴りを間違えていて正しく動きません。重複を整理しつつ、両方が正しく動くようにさせてください。
完成条件
- 触ってよいのは kakeibo.py だけです
- total_expense と total_income の名前は残してください
- summary 関数の戻り値で採点します