”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 了解干净的代码:处理 ⚡

了解干净的代码:处理 ⚡

发布于2024-08-25
浏览:947

Understanding Clean Code: Handling ⚡

错误处理是编写健壮可靠的软件的一个重要方面。然而,不小心可能会导致代码混乱,难以阅读和维护。

《简洁代码》第 7 章深入探讨了处理错误的技术,这些技术不会使代码混乱,强调清晰性和简单性。

在本文中,我们将探讨本章中的关键概念以及如何在 JavaScript 中应用它们以保持代码库整洁和可维护。


? 1. 使用异常而不是错误代码

干净代码的关键原则之一是优先选择异常而不是错误代码。

异常允许您将错误处理逻辑与主逻辑分开,使您的代码更具可读性。

示例:避免错误代码

function getUser(id) {
    const user = database.findUserById(id);
    if (user === null) {
        return -1;  // Error code for user not found
    }
    return user;
}

const result = getUser(123);
if (result === -1) {
    console.error('User not found');
} else {
    console.log(result);
}

在这个例子中,错误处理与主逻辑交织在一起,使其更难以理解。

示例:使用异常

function getUser(id) {
    const user = database.findUserById(id);
    if (user === null) {
        throw new Error('User not found');
    }
    return user;
}

try {
    const user = getUser(123);
    console.log(user);
} catch (error) {
    console.error(error.message);
}

通过使用异常,我们将错误处理逻辑与主逻辑分开,使代码更干净、更容易理解。


? 2. 提供有意义的信息

抛出异常时,提供有意义的错误消息来提供有关错误的上下文非常重要。

这有助于快速诊断问题,而无需深入研究代码。

示例:在错误消息中提供上下文

function getUser(id) {
    const user = database.findUserById(id);
    if (user === null) {
        throw new Error(`User with ID ${id} not found`);
    }
    return user;
}

try {
    const user = getUser(123);
    console.log(user);
} catch (error) {
    console.error(error.message);  // Outputs: User with ID 123 not found
}

描述性错误消息提供了立即理解问题所需的上下文。


? 3. 不要返回 Null

返回 null 可能会导致难以跟踪的 null 引用错误。

考虑抛出异常或使用提供默认行为的特殊情况模式,而不是返回 null。

示例:避免返回 Null

function getUser(id) {
    const user = database.findUserById(id);
    if (user === null) {
        return null;  // This can lead to null reference errors
    }
    return user;
}

const user = getUser(123);
if (user !== null) {
    console.log(user.name);
}

返回 null 需要额外的检查,并且可能会使您的代码变得混乱。

示例:引发异常或使用特殊情况

function getUser(id) {
    const user = database.findUserById(id);
    if (user === null) {
        throw new Error(`User with ID ${id} not found`);
    }
    return user;
}

// OR

class NullUser {
    get name() {
        return 'Guest';
    }
}

function getUser(id) {
    const user = database.findUserById(id);
    return user || new NullUser();
}

引发异常或使用特殊情况对象(如 NullUser)有助于避免空引用错误并保持代码干净。


? 4. 谨慎使用 Try-Catch-Finally

虽然 try-catch-finally 块对于处理异常至关重要,但过度使用它们会使您的代码变得混乱。

仅在必要时使用它们,并避免深层嵌套的块。

示例:避免过多的 Try-Catch

try {
    const data = JSON.parse(input);
    try {
        const user = getUser(data.id);
        try {
            sendEmail(user.email);
        } catch (error) {
            console.error('Failed to send email:', error.message);
        }
    } catch (error) {
        console.error('User retrieval failed:', error.message);
    }
} catch (error) {
    console.error('Invalid JSON:', error.message);
}

由于多个嵌套的 try-catch 块,此代码很难理解。

示例:重构以减少混乱

function parseInput(input) {
    try {
        return JSON.parse(input);
    } catch (error) {
        throw new Error('Invalid JSON');
    }
}

function retrieveUser(data) {
    return getUser(data.id);
}

function notifyUser(user) {
    sendEmail(user.email);
}

try {
    const data = parseInput(input);
    const user = retrieveUser(data);
    notifyUser(user);
} catch (error) {
    console.error(error.message);
}

通过将逻辑分解为单独的函数,我们减少了嵌套并提高了可读性。


? 5. 不要忽略捕获的异常

如果捕获异常,请确保正确处理。

默默地忽略异常可能会导致意外行为并使调试变得困难。

示例:不要忽略异常

try {
    const user = getUser(123);
} catch (error) {
    // Ignoring the exception
}

忽略异常可以掩盖代码中的潜在问题。

示例:处理或记录异常

try {
    const user = getUser(123);
} catch (error) {
    console.error('An error occurred:', error.message);
}

处理或记录异常可确保您了解任何问题并可以相应地解决这些问题。


⚡ 结论

有效的错误处理对于编写干净、可维护的 JavaScript 代码至关重要。

通过遵循《干净代码》中的原则,例如使用异常而不是错误代码、在错误消息中提供上下文、避免 null 返回、谨慎使用 try-catch 以及不忽略捕获的异常,您可以确保错误处理逻辑既坚固又不引人注目。

快乐编码!

版本声明 本文转载于:https://dev.to/alisamir/understanding-clean-code-handling-59ji?1如有侵犯,请联系[email protected]删除
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3