⌨️ 第五章 从设计到测试
📄 本篇摘要

命名是编程里最难的两件事之一(另一件是缓存失效)。名字是代码里密度最高的注释:变量的名字说它装什么,函数的名字说它做什么,类的名字说它是什么。本篇讲三种主流命名法、各语言惯例与团队规范。

📝 关系

上一节:注释、缩进、嵌套 | 下一节:单元测试与集成测试

一、三种主流命名法

风格 长相 常见于
snake_case(蛇形) total_price Python(变量/函数)、C++(部分)、数据库字段
camelCase(驼峰) totalPrice Java/JavaScript(变量/函数)
PascalCase(大驼峰) TotalPrice 类名(Python、Java、C++ 通用惯例)

还有一个常量惯例:全大写+下划线 MAX_RETRY = 3(Python 用它表示【这是个常量,别改】——语言不强制,靠约定)。

二、好名字的四条标准

  1. 见名知义——days_until_deadline 完胜 d 或 x2。
  2. 可发音——代码要能被口头讨论(「这个 genymdhms 是啥?」——生成日期年月日时分秒,念不出来)。
  3. 可搜索——全局搜索 MAX_RETRY 一找一个准,搜 i 会淹死。
  4. 诚实——叫 list 的就真的是列表;别叫 account_list 却返回单个对象。

函数用动词(calc_total、is_valid——布尔函数以 is/has/can 开头是通行惯例),类用名词(Order、Parser)。

三、编码规范:不止管命名

编码规范(coding standard)是团队约定的合集,管的不只是名字:

Python 的事实标准是 PEP 8(Python 官方风格指南,2.1 节提过的 35 个关键字的作者 Guido 们写的);C++ 大厂各有风格指南(如 Google C++ Style Guide);Java 有《阿里巴巴 Java 开发手册》这类工业级规范。

关键认知:规范哪套都行,但一个项目只能有一套。 个人风格让位团队一致性——读统一风格的代码,认知负担减半。

四、工具替人把关

风格问题不该靠人眼检查——交给工具:Python 生态的 linter(如 ruff、flake8)自动指出违规,formatter(如 black)直接替你改好。人只审查【工具看不出来的问题】:逻辑、设计、命名是否达意。

五、动手 Demo:一次改名的前后对比

# 重构前:名字全靠猜
def f(l):
    r = 0
    for i in l:
        if i > r:
            r = i
    return r

# 重构后:不看实现也猜得出意图
def find_max_value(numbers):
    max_value = 0
    for number in numbers:
        if number > max_value:
            max_value = number
    return max_value

temps = [12, 31, 25, 8]
print(f(temps))
print(find_max_value(temps))

沙箱实跑输出:

31
31

看到什么算成功:两个函数输出相同。

读结果:行为一模一样,但第二个版本读起来不需要在脑子里执行代码——这就是命名的复利。顺带一提,负数温度会让这两个函数都返回错的 0(初值埋雷)——好名字解决不了逻辑 bug,测试登场才能(下一节)。

六、30 秒实验

把 Demo 里的 max_value = 0 改成 max_value = None,再加一行 if max_value is None or number > max_value: max_value = number——重跑,负数列表也对了。命名、逻辑、测试,是一根绳上的三只蚂蚱。

七、常见误区

误区 真相
短名字打字快 读的时间远多于写;d 省下的三秒要用十分钟还
规范是束缚个人风格 一致性本身价值最大;团队里没有【我的风格】
有 linter 就不用管命名 工具管格式管不了达意——data2 语法合规但毫无信息量
自测三问(点击展开) 1. **snake_case、camelCase、PascalCase 各举一个使用场景?** 答:Python 变量用 snake_case、Java 局部变量用 camelCase、类名用 PascalCase。 2. **布尔函数的命名惯例?** 答:以 is/has/can 开头,让调用处读起来像句子:`if is_valid(x)`。 3. **为什么风格问题要交给工具?** 答:格式违规是机械判断,人查又慢又漏;机器自动查自动改,人省下精力审逻辑。

相关笔记