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

PHPz
リリース: 2024-08-18 07:23:32
オリジナル
992 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!