变量名敢用中文?我在一个混合团队里实测了一整年
Photo: Joonspoon, CC BY-SA 4.0, via Wikimedia Commons
去年接手一个内部工具项目时,我做了个大胆的决定:允许——甚至鼓励——团队成员用中文写变量名和函数名。一年过去了,代码库活得好好的,我也有了不少想说的实话。
先说结论:没有想象中那么糟
很多人一听「中文变量名」,第一反应是「这不折腾吗」。但我们的场景比较特殊:团队里一半是刚转行三个月的新人,业务领域又是保险精算,一堆术语用英文翻译过来全是「premiumCalculation」这种谁也记不住的拼串。
改成 待缴保费、满期日 之后,新人上手速度肉眼可见地变快了。代码评审时,讨论业务逻辑的效率也高了——大家不用在「这个词到底指哪个概念」上反复确认。
IDE 支持比想象中好,但有暗坑
主流工具链的表现让我意外。IntelliJ 系、VS Code 对 Unicode 标识符的支持已经相当成熟:补全、重构、跳转定义全都正常工作。Git diff 和大多数 CI 日志也没问题。
但坑藏在细节里:
- 某些老命令行工具在 Windows 默认 GBK 编码的终端里输出中文标识符会变乱码——对,又是我们这个站天天聊的编码问题
- 一位同事用的某个冷门静态分析插件直接把中文变量标记为「非法命名」,规则写死了
[a-zA-Z0-9_] - 复制粘贴到 markdown 文档或工单系统时,偶尔遇到全角引号混入导致语法错误
这些都是「能解决但烦人」级别的问题,不是拦路虎。
国际协作是真正的硬边界
必须坦白:如果团队里有不看中文的成员,中文标识符基本可以直接否决。我们后来和海外团队合作一个模块时,把那一层的命名全部换回了英文。这不是技术问题,是基本的尊重和可维护性问题。
所以我的建议变成了一条边界清晰的规则:领域层可以用中文,接口和公共层必须英文。类似很多团队「内部注释中文、对外文档英文」的分层做法。
什么时候值得试?
根据这一年的经验,我总结三个适合的场景:
- 术语翻译损耗大的领域:法律、医疗、金融,英文翻译经常丢失精确含义
- 以中文母语者为主的封闭团队:长期维护成本可控
- 教学和内部脚本:降低认知负担,收益明显
反过来,开源项目、跨时区协作、依赖老旧工具链的场景,就别折腾了。
写在最后
中文编程不是信仰之争,是工程权衡。标识符本质上是给人看的编码——既然我们花那么多精力搞定 UTF-8,让编译器正确处理中文又何尝不可?关键是想清楚你的团队、你的领域、你的工具链,然后划一条清晰的边界。
如果你也在犹豫,不妨先拿一个内部小工具试三个月。最坏的结果,也就是一次全局重命名而已。