命名是编程里最难的两件事之一(另一件是缓存失效)。名字是代码里密度最高的注释:变量的名字说它装什么,函数的名字说它做什么,类的名字说它是什么。本篇讲三种主流命名法、各语言惯例与团队规范。
一、三种主流命名法
| 风格 | 长相 | 常见于 |
|---|---|---|
| snake_case(蛇形) | total_price |
Python(变量/函数)、C++(部分)、数据库字段 |
| camelCase(驼峰) | totalPrice |
Java/JavaScript(变量/函数) |
| PascalCase(大驼峰) | TotalPrice |
类名(Python、Java、C++ 通用惯例) |
还有一个常量惯例:全大写+下划线 MAX_RETRY = 3(Python 用它表示【这是个常量,别改】——语言不强制,靠约定)。
二、好名字的四条标准
- 见名知义——
days_until_deadline完胜d或x2。 - 可发音——代码要能被口头讨论(「这个
genymdhms是啥?」——生成日期年月日时分秒,念不出来)。 - 可搜索——全局搜索
MAX_RETRY一找一个准,搜i会淹死。 - 诚实——叫
list的就真的是列表;别叫account_list却返回单个对象。
函数用动词(calc_total、is_valid——布尔函数以 is/has/can 开头是通行惯例),类用名词(Order、Parser)。
三、编码规范:不止管命名
编码规范(coding standard)是团队约定的合集,管的不只是名字:
- 命名法与禁用词;
- 每行长度、括号位置、空格用法;
- import 顺序、文件组织;
- 注释什么时候必须写。
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. **为什么风格问题要交给工具?** 答:格式违规是机械判断,人查又慢又漏;机器自动查自动改,人省下精力审逻辑。- ☐ 5-2 学习完成
相关笔记
- 数据库 5-15 · 命名规则 —— 表和列的同一场考试
- 注释、缩进、嵌套 —— 可读性三基石的前两块
- ⌨️ 编程原理 · 索引 —— 全课路线图