Diffパッチで関数を変更する
行の削除と追加を組み合わせて既存の関数を変更するUnified Diffパッチを適用します。'-'行と'+'行がどのように連携して編集を表現するかを解説します。
Basic Patches
詳細な説明
追加と削除の組み合わせによるコード変更
実際のパッチのほとんどは、-(削除)と+(追加)行を組み合わせて変更を表現します。Diff内で「変更された」行は、実際には古いバージョンの削除と新しいバージョンの追加として表示されます。
オリジナルの例
function calculateTotal(items) {
let total = 0;
for (let i = 0; i < items.length; i++) {
total += items[i].price;
}
return total;
}
パッチの例
--- a/calc.js
+++ b/calc.js
@@ -1,7 +1,5 @@
-function calculateTotal(items) {
- let total = 0;
- for (let i = 0; i < items.length; i++) {
- total += items[i].price;
- }
- return total;
+function calculateTotal(items, taxRate = 0) {
+ const subtotal = items.reduce((sum, item) => sum + item.price, 0);
+ const tax = subtotal * taxRate;
+ return subtotal + tax;
}
変更の理解
Unified Diff形式には「変更」操作はなく、追加と削除のみです。行が変更された場合:
- 旧バージョンが
-プレフィックスで表示 - 新バージョンが
+プレフィックスで表示
パッチエンジンはすべての-行を削除し、その位置にすべての+行を挿入します。末尾のコンテキスト行}が変更を正しい位置に固定します。
グループ化の慣例
慣例として、関連する削除と追加はグループ化されます。削除ブロックが先に表示され、その後に追加ブロックが続きます。これにより、Diffを読む際に何が変更されたかを視覚的に比較しやすくなります。
ユースケース
チームメンバーがモダンなJavaScript機能(アロー関数、reduce)を使って関数をリファクタリングし、税率パラメータを追加しました。パッチを適用してローカルコピーを更新します。