クリーン コードの第 12 章「創発」では、基本的な設計原則を遵守することで、クリーンで適切に構造化されたソフトウェアがどのように誕生するかについて説明します。
ソフトウェア設計における創発とは、単純でよく理解されたルールから複雑な動作や機能が生まれるプロセスを指します。
これらのルールに従うことは、開発者が保守、拡張、理解が容易なソフトウェアを作成するのに役立ちます。
この章では、シンプルな設計の 4 つのルールに焦点を当て、クリーンで効率的なコードのためのシンプルさとテスト容易性を強調します。
これらのルールをそれぞれ分解して、JavaScript を使用してどのように適用されるかを見てみましょう。
クリーンな新興ソフトウェアの基礎は、それが機能することです。
すべてのコードはテストに合格し、期待される動作が維持され、新しい機能によってバグが発生しないことを確認する必要があります。
JavaScript では、これは多くの場合、Jest や Mocha などのライブラリを使用して単体テストを作成することで実現されます。
function add(a, b) { return a + b; } // Test (using Jest) test('adds 1 + 2 to equal 3', () => { expect(add(1, 2)).toBe(3); });
ソフトウェアがすべてのテストに合格することを確認することで、システムが意図したとおりに動作することが保証されます。
クリーンなコードは信頼性の高いテストから始まります。これがなければ、他のルールはどれも意味がありません。
コードは、それが何を行うのかを伝える必要があります。適切な名前の関数、変数、クラスを使用すると、コメントを必要とせずにコードが読みやすく、理解しやすくなります。
その意図を明らかにするコードは一目瞭然です。
不適切なネーミング:
function d(x) { return x * 2; }
良いネーミング:
function doubleNumber(number) { return number * 2; }
この場合、doubleNumber() は関数の意図を明確に示しています。
このコードを読んだ人は誰でも、追加の説明なしでその目的をすぐに理解できます。
これにより、混乱が軽減されるだけでなく、保守性も向上します。
コードの重複は、クリーンなソフトウェアの最大の敵の 1 つです。ロジックを繰り返すと、バグが発生し、メンテナンスの労力が増加する可能性があります。
目標は、一般的な動作を再利用可能な関数またはモジュールに抽象化することで冗長性を削減することです。
コードの重複:
function calculateAreaOfSquare(side) { return side * side; } function calculateAreaOfRectangle(length, width) { return length * width; }
どちらの関数も同様の計算を行っています。リファクタリングを行うことで重複を排除できます。
重複なし:
function calculateArea(shape) { if (shape.type === 'square') { return shape.side * shape.side; } else if (shape.type === 'rectangle') { return shape.length * shape.width; } }
関数を一般化することで、ロジックの繰り返しを排除し、コードの保守性を高めます。
シンプルな設計の最後のルールは、明確さを犠牲にすることなくクラスとメソッドの数を最小限に抑えることを奨励します。
これは、不必要な複雑さを避けることを意味します。
各クラスまたは機能は、単一責任原則 (SRP) を遵守し、明確で焦点を絞った責任を負う必要があります。
メソッドが多すぎます:
class User { constructor(name) { this.name = name; } getName() { return this.name; } setName(name) { this.name = name; } printWelcomeMessage() { console.log(`Welcome, ${this.name}!`); } // Additional unrelated methods getUserProfile() { // ... some logic } logActivity() { // ... some logic } }
このクラスには責任が多すぎます。ユーザー名の管理のみに重点を置く必要があります。
リファクタリング済み:
class User { constructor(name) { this.name = name; } getName() { return this.name; } setName(name) { this.name = name; } } class Logger { static logActivity(user) { // ... some logic console.log(`${user.getName()} performed an activity.`); } }
関心事を分離することで、コードがよりシンプルになり、保守が容易になります。
各クラスは、ミニマリズムとシンプルさの原則を遵守し、単一の責任を負います。
シンプルな設計の 4 つのルール (すべてのテストに合格する、意図を明らかにする、重複を排除する、クラスとメソッドの数を最小限に抑える) は、クリーンで保守可能で創発的なコードの作成に役立ちます。
これらの原則に従うことで、複雑さが抑制され、コードの変更への適応性が高まります。
コーディングを楽しんでください!
以上がクリーンコードの理解: 出現 ⚡️の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。