C++ 整洁代码:编写可读代码的原则

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

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

开始课程

C++ 中的 Clean Code:如何编写不羞于展示给同事的代码



每个 C++ 开发者迟早都会遇到这样的情况:自己的代码一个月后变成了“黑暗森林”。像 int a 这样的变量、长达 300 行的函数以及整个项目中的魔法数字——熟悉吗?在本文中,我们将探讨 Clean Code 原则在 C++ 中的应用,使您的代码不仅能够工作,而且对他人(以及未来的您)来说易于理解。



1. 变量、函数和类的命名



好的名字是成功的一半。在 C++ 中,通常对变量和函数使用 camelCase,对类使用 PascalCase,对常量使用 UPPER_CASE(尽管在现代 C++ 中更倾向于使用 constexpr)。



糟糕的例子:

int d; // elapsed time in daysfloat x; // salary multiplierbool fl; // is file loaded?


好的例子:

int elapsedDays;float salaryMultiplier;bool isFileLoaded;


规则很简单:名字应该回答“这是什么?”或“它做什么?”的问题。避免使用缩写(除非是普遍接受的,例如 idx 表示索引)。对于布尔变量,使用前缀 is、has、can。



2. 函数应该小而精,只做一件事



Clean Code 的经典原则是:一个函数应该只完成一个任务。如果您无法为函数想出一个简短且易懂的名字——很可能它做了太多事情。



糟糕的例子:

void processData(std::vector<int>& data) {    // 排序    std::sort(data.begin(), data.end());    // 删除重复项    data.erase(std::unique(data.begin(), data.end()), data.end());    // 计算平均值    double sum = 0;    for (int val : data) sum += val;    double avg = sum / data.size();    // 输出    std::cout << "Average: " << avg << std::endl;}


好的例子:

std::vector<int> sortAndUnique(std::vector<int> data) {    std::sort(data.begin(), data.end());    data.erase(std::unique(data.begin(), data.end()), data.end());    return data;}

double calculateAverage(const std::vector<int>& data) { if (data.empty()) return 0.0; double sum = std::accumulate(data.begin(), data.end(), 0.0); return sum / data.size();}

void printAverage(const std::vector<int>& data) { auto processed = sortAndUnique(data); double avg = calculateAverage(processed); std::cout << "Average: " << avg << std::endl;}


每个函数解决一个任务,易于测试和重用。函数长度不应超过 20-30 行——这是一个很好的参考标准。



3. 避免魔法数字和重复



魔法数字是指那些从上下文中无法理解其含义的数字。应使用命名常量代替它们。



糟糕的例子:

double calculatePrice(double base) {    return base * 1.2 + 5.0;}


好的例子:

constexpr double TAX_RATE = 1.2;constexpr double DELIVERY_FEE = 5.0;

double calculatePrice(double basePrice) { return basePrice * TAX_RATE + DELIVERY_FEE;}


代码重复也是如此。如果您复制一段代码超过一次——请将其提取到一个函数中。DRY(Don't Repeat Yourself)原则是可维护代码的基础。



4. 注释不是糟糕代码的借口



最好的注释是编写良好的代码,它不需要解释。注释应该解释代码为什么做某些不明显的事情,而不是做什么。



糟糕的例子:



                
                

博客

书籍推荐