導入
リファクタリングは、既存のコードを改善し、可読性や保守性を高める手法です。特に中級のTypeScript開発者にとって、リファクタリングの技術を身につけることは、日々の業務において重要なスキルとなります。この記事では、リファクタリングの具体的なシチュエーションを通じて、実務に役立つ知識を深めていきます。
教科書レベルの解説(リファクタリング)
重要な概念の整理
リファクタリングは、コードの外部的な振る舞いを変えずに内部構造を改善するプロセスです。これにより、バグの減少、機能追加の容易さ、テストのしやすさを実現します。リファクタリングには、メソッドの抽出、変数名の変更、クラスの分割など、さまざまな手法があります。これらの手法を適切に使うことで、コードベース全体の品質が向上します。
コード例(TypeScript)
class Order {
constructor(private items: string[], private discount: number) {}
calculateTotal(): number {
let total = 0;
for (const item of this.items) {
total += this.getPrice(item);
}
return total - this.discount;
}
private getPrice(item: string): number {
const prices: { [key: string]: number } = {
apple: 100,
banana: 150,
orange: 200,
};
return prices[item] || 0;
}
}
コードの行ごとの解説
- クラスOrderが定義され、itemsとdiscountがコンストラクタで受け取られます。
- calculateTotalメソッドが定義され、アイテムの合計金額を計算します。
- for文を用いて各アイテムの価格を取得し、合計を計算します。
- 最終的に割引を適用し、総額を返します。
- getPriceメソッドは、アイテム名に基づいて価格を取得します。
解説編
このコード例では、Orderクラスがアイテムの合計金額を計算する機能を持っていますが、リファクタリングの余地があります。たとえば、getPriceメソッドはアイテム名に基づいて価格を取得していますが、価格情報を別のデータソースから取得するように変更することが考えられます。これにより、価格変更時のメンテナンスが容易になり、コードの柔軟性が向上します。また、アイテムの価格を管理するためのクラスやサービスを作成することで、単一責任の原則に従った設計が可能になります。
まとめ
- リファクタリングは、コードの可読性と保守性を向上させる手法である。
- 具体的なシチュエーションに基づいてリファクタリングを行うことで、実務に即した改善が可能となる。
- コードの柔軟性を高めるために、価格情報を外部化することが有効である。