JavaScript:
リファクタリング
方法:
リファクタリングがどのようにコードをより簡潔で読みやすくするかの簡単な例を見てみましょう。ここでは、数字の配列の合計を計算する関数をリファクタリングします。
変更前:
function calculateSum(arr) {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
console.log(calculateSum([1, 2, 3, 4])); // 出力: 10
変更後:
function calculateSum(arr) {
return arr.reduce((sum, num) => sum + num, 0);
}
console.log(calculateSum([1, 2, 3, 4])); // 出力: 10
reduce
メソッドが機能をそのままに関数のサイズを削減する方法がわかりますか?それがリファクタリングです。
深掘り
リファクタリングが正式な実践として浮上したのは、1999年のマーチン・ファウラーの著書『Refactoring: Improving the Design of Existing Code』の出版までありませんでした。この本は、アジャイルソフトウェア開発の台頭とともに、リファクタリングを主流に押し上げるのを助けました。
リファクタリングをソフトウェア開発の観点から説明することは、なぜ作業場を片付けるかを説明することに似ています:次に何か(この場合はコード)を修正する必要がある時に、混乱を扱うのに時間をかけることなく、実際の問題にもっと集中できるようにするためです。
リファクタリングへの代替策について語るとき、私たちはソフトウェア保守戦略についてのより広い議論に足を踏み入れます。例えば、完全な書き換えを選択することもできますが、それはしばしばより高コストでリスキーです。インクリメンタルにリファクタリングすると、突然の大規模変更から船を沈めることなく、継続的な利益を享受できます。
リファクタリングは、統合開発環境(IDE)やJSHint、ESLint、PrettierなどのJavaScriptエコシステムのツールの開発によって助けられてきました。これらはコード品質チェックを自動化し、リファクタリングの機会を強調表示します。
すべては、クリーンで表現力豊かで保守可能なコードについてです。リファクタリングプロセスの一部として、洗練されたアルゴリズム、データ構造の最適化、あるいは手続き型から関数型プログラミングスタイルへの切り替えなどのアーキテクチャの変更も含まれるかもしれません。
リファクタリングは慎重に行う必要があります。変更がソフトウェアの挙動を予期せずに変更していないことを確認するために頑健なテストセットが不可欠です。これが、リファクタリングと良く合うテスト駆動開発(TDD)のもう一つの理由です。それはデフォルトでその安全ネットを提供します。
関連項目
マーチン・ファウラーのリファクタリングの本:Refactoring - Improving the Design of Existing Code
JavaScriptテストフレームワーク(リファクタリングが機能を壊さないようにするために):
コード品質とリファクタリングサポートのためのツール:
- ESLint:ESLint - プラグイン可能なJavaScriptリンター
- Prettier:Prettier - 意見のあるコードフォーマッター