ホームページ  >  記事  >  ウェブフロントエンド  >  コードの匂い - ハンロンのカミソリ

コードの匂い - ハンロンのカミソリ

PHPz
PHPzオリジナル
2024-08-18 07:23:321026ブラウズ

複雑にしすぎないでください: シンプルにしてください

TL;DR: 過剰防御的なコードは不必要な複雑さをもたらします。

問題点

  • 不必要な複雑さ

  • 紛らわしいロジック

  • 隠れたバグ

  • メンテナンスが難しくなる

  • パフォーマンスが遅い

  • 乱雑なコード

ソリューション

  1. チェックを簡素化します

  2. 自分の論理を信じてください

  3. 要点に焦点を当てる

  4. K.I.S.S.をフォローしてください。原則

  5. 定期的にリファクタリング

コンテクスト

コードを考えすぎたり設計しすぎたりすると、不必要な複雑さが生じる可能性があります。

考えられる すべて のシナリオに対して防御する必要があるかもしれませんが、このアプローチでは、多くの場合、肥大化してわかりにくいコードが生成されます。

Hanlon's Razor は、単純な間違いや誤解が発生する可能性が高い場合は悪意を想定すべきではないと示唆しています。

過度に防御的なプログラミングを避け、明確で単純なロジックに焦点を当てます。

決して起こらないかもしれない将来の問題を予測したり、コードを柔軟にしすぎたりする可能性があります。

シンプルなコードは、保守、デバッグ、理解が容易です。

サンプルコード

間違っている

function processData(data) {
    if (typeof data === 'undefined') {
        throw new Error('Data is undefined');
    }

    if (typeof data !== 'object') {
        throw new Error('Data is not an object');
    }

    if (data === null) {
        throw new Error('Data is null');
    }

    if (Array.isArray(data)) {
        throw new Error('Data should not be an array');
    }

    if (!data.hasOwnProperty('items')) {
        return [];
    }

    if (!Array.isArray(data.items)) {
        throw new Error('Items should be an array');
    }

    if (data.items.length === 0) {
        return []; 
    }

    let processedItems = [];
    for (let item of data.items) {
        if (typeof item === 'undefined') {
            continue; // Skip undefined items
        }

        if (typeof item !== 'object') {
            continue; // Skip non-object items
        }

        if (item === null) {
            continue; // Skip null items
        }

        processedItems.push(processItem(item));
    }

    return processedItems;
}

function processData(data) {
    if (!Array.isArray(data.items)) {
        throw new Error('Invalid data');
    }

    return data.items
        .filter(item => typeof item === 'object' && item !== null)
        .map(item => processItem(item));
}

検出

[X] マニュアル

複雑なコードには通常より多くの行が含まれており、長いメソッドがヒントになる可能性があります。

タグ

  • ブローター

レベル

[x] 中級

AIの生成

AI ジェネレーターは、考えられるあらゆるエッジケースを考慮しようとすると、この臭いが発生する可能性があります。

たとえば、NULL を完全に回避すれば、NULL の処理は不要です。

AI検出

AI ツールは、ロジックを分析し、適切なガイダンスとともに簡略化を提案することで、過度に防御的なコードを検出するのに役立ちます。

これらのツールでは、多くの場合、不要なチェックを削除するか、明確にするためにチェックを結合することが推奨されます。

結論

コードを考えすぎたり設計しすぎたりしないようにしてください。

最も可能性の高いシナリオに焦点を当て、明確で単純なロジックを作成します。

シンプルさはコードの品質を向上させ、メンテナンスを容易にします。

関係

詳細情報

ウィキペディア

防御的なプログラミング

免責事項

コードの匂いは私の意見です。

クレジット

Unsplash の Nacho Fernández による写真


シンプルさは究極の洗練です。

レオナルド・ダ・ヴィンチ


この記事は CodeSmell シリーズの一部です。

以上がコードの匂い - ハンロンのカミソリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。