首頁  >  文章  >  web前端  >  代碼氣味 - Hanlon&#s Razor

代碼氣味 - Hanlon&#s Razor

PHPz
PHPz原創
2024-08-18 07:23:32993瀏覽

不要太複雜:保持簡單

TL;DR:過度防禦的程式碼會導致不必要的複雜性。

問題

  • 不必要的複雜性

  • 邏輯混亂

  • 隱藏的錯誤

  • 更難維護

  • 效能較慢

  • 混亂的程式碼

解決方案

  1. 簡化檢查

  2. 相信你的邏輯

  3. 專注於必需品

  4. 跟隨 K.I.S.S.原則

  5. 定期重構

情境

過度思考和過度設計你的程式碼可能會導致不必要的複雜性。

您可能需要防禦每種可能的情況,但這種方法通常會產生臃腫、混亂的程式碼。

漢隆剃刀建議,當更可能發生簡單錯誤或誤解時,您不應抱持惡意。

避免過度防禦性程式設計並專注於清晰、直接的邏輯。

您可能會預見到未來可能永遠不會發生的問題,或者嘗試使您的程式碼過於靈活。

簡單的程式碼更容易維護、調試和理解。

範例程式碼

錯誤的

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] 中級

人工智慧世代

人工智慧生成器在嘗試考慮每種可能的邊緣情況時可能會引入這種氣味。

例如,如果完全避免 NULL,則無需處理它們。

人工智慧檢測

人工智慧工具可以透過分析邏輯並在適當的指導下提出簡化建議來幫助檢測過度防禦性的程式碼。

為了清晰起見,這些工具通常建議刪除不必要的檢查或將它們組合起來。

結論

避免過度思考和過度設計你的程式碼。

專注於最有可能的場景並寫出清晰、簡單的邏輯。

簡單可以帶來更好的程式碼品質和更容易的維護。

關係

更多資訊

維基百科

防禦性程式設計

免責聲明

程式碼味道是我的觀點。

製作人員

照片由 Nacho Fernández 在 Unsplash 上拍攝


簡單就是終極的複雜。

達文西


本文是 CodeSmell 系列的一部分。

以上是代碼氣味 - Hanlon&#s Razor的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn