C++中的Clean Code:原则与实践示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C++中的Clean Code:原则与实践示例



每位C++开发人员迟早都会遇到维护自己或他人代码的问题。复杂的模板、重载的函数和无尽的宏使项目变成噩梦。由Robert Martin推广的Clean Code(整洁代码)概念,提供了一些简单但有效的规则,使代码变得清晰、安全且易于修改。在本文中,我们将剖析适用于C++的Clean Code关键原则,并展示如何在实际中应用它们。



1. 变量和函数命名:言明其意



整洁代码的第一条规则是——名称应揭示开发者的意图。在C++中,由于指针、引用和重载众多,这一点尤为重要。



糟糕的示例:

int d; // 以天为单位的已过时间void f(int* a, int n); // ???


良好的示例:

int daysSinceLastLogin;void processUserData(const std::vector<int>& userIds);


使用完整的单词,避免单字母变量(短循环中的索引除外)。对于布尔变量,使用前缀 is、has、should:

bool isValidInput;bool hasPermissions;


类和结构体用名词命名,函数用动词或动词短语命名:class UserAccount、void calculateSalary()。



2. 函数:短小精悍,单一职责



函数应该只做一件事,并且把它做好。最大长度应为20-30行。如果函数更长,请将其拆分为辅助函数。



糟糕的示例(单体函数):

void processOrder(Order& order) {    // 检查支付    // 更新库存    // 发送邮件    // 记录日志    // 生成收据}


良好的示例(分解):

void processOrder(Order& order) {    if (!validatePayment(order)) return;    updateInventory(order);    sendConfirmationEmail(order);    logTransaction(order);    generateReceipt(order);}


尽量避免副作用。函数不应修改全局变量或通过引用传递的参数,除非在名称中明确说明(如 resetData、fillBuffer)。



3. 内存与资源管理:RAII与智能指针



C++提供了对内存的完全控制,但这会导致内存泄漏。Clean Code建议使用RAII(资源获取即初始化)惯用法和智能指针,而不是原始的 new/delete。



糟糕的示例(手动管理):

void process() {    int* data = new int[100];    // ... 大量代码 ...    if (error) {        delete[] data;        return;    }    delete[] data;}


良好的示例(RAII):

void process() {    std::unique_ptr<int[]> data = std::make_unique<int[]>(100);    // ... 代码 ...    // 离开作用域时自动调用 delete}


对于共享所有权,使用 std::shared_ptr;对于弱引用,使用 std::weak_ptr。永远不要返回指向内部数据的原始指针——应使用引用或智能指针。



4. 错误处理:异常与返回码



整洁代码要求显式且可预测的错误处理。在C++中有两种主要方法:异常和返回码。在项目中应选择一种风格并保持一致。



糟糕的示例(忽略错误):

int divide(int a, int b) {    return a / b; // 除以零!}


良好的示例(异常):

int divide(i                

博客

书籍推荐