在代码中进行中文命名(类/变量/方法等)的优势

2018-07-19-naming优势.png
最初的专栏文章对在代码中使用中文命名的质疑与回应是对一些常见质疑的批驳, 至今未见更有理的反面声音. 鉴于最近看到一些对中文命名进行负面暗示各种带节奏的网文(见最近一波对中文编程(包括中文命名)的攻势), 实在难以置之不理.

此文尝试小结一些比起英文命名更方便之处. 注意这是在明确的母语优势(对在代码中使用中文命名的质疑与回应"没有好处"一节)基础上额外的优势:

1. 不需要驼峰命名法或者下划线分隔

之前看到过有人问"中文命名怎么用驼峰命名法?". 答案是, 不用, 因为根本就不需要. 原因很简单, 中文语言本身就不用空格分隔. 带来的好处是, 中文命名和中文自然语言更加接近. 比较如下:

英文变量名: "weaponOfMonkeyKing" 或者 "weapon__of_monkey__king"

对应自然语言: "weapon of the Monkey King"

中文变量名: "孙悟空的武器" 对应自然语言完全相同

2. 单字变量视觉混淆更少

Python创始人亲自编写的Python命名规范PEP 8 -- Style Guide for Python Code就直接指出需要避免使用单字母的'l', 'O', 'I'(猜猜第一个还是第三个是大写i?)进行命名:

Never use the characters 'l' (lowercase letter el), 'O' (uppercase letter oh), or 'I' (uppercase letter eye) as single character variable names.
In some fonts, these characters are indistinguishable from the numerals one and zero. When tempted to use 'l', use 'L' instead.

另外还有i, j在两层循环中容易混淆等等, 而中文单字(如'甲', '乙', '丙', '丁'等等)没有这样的问题

3. 中文单复数模糊性更符合语义

摘自中英文代码对比系列之Java一例:

flaggedCells是个List, 它用复数命名的意思是”可能包含多个格”. 而实际上这个变量可能只包含一个格. 中文中的名词不分单复数, 正好符合”这个变量有可能含有单个或多个元素”这个语义. 因此命名为被标的格感觉可行. 假如语义需要强调有多个(不可能只有单个或没有), 可以考虑加上修饰如多个前缀等等.

4. 单字命名有更多选择, 也更可读

承蒙评论中指出, 单字命名在英文命名中确实常见. Is the use of one-letter variables encouraged?总结的比较全面, 还加了不少双字母的.

由于英文字母总共26个, 加上大写也很有限. 以至于有些字母有几种用法, 比如k: 1) 在循环中表示变量 2) 在表中表示键. 而单字中文的选择就多的多了. 比如(肯定有更合适的, 待集思广益): index-位/索/引, file-档, key-键(循环变量用'甲乙丙丁'之类, 就不会有上面的k的两种用法问题), value-值. 而这些中文单字比起对应的英文字母来, 明显更可读. 比较: i-位/索/引, f-档, k-键, v-值

5. 更不易笔误,笔误后也更容易发现

多谢评论区@孙雨辰。如最近看的一个官方文档还看到了“valve”(value)这样的笔误,记忆里也有过差一个字母debug时纳闷的经历。第二语言的拼写本身比母语来的更易出错,包括对于错字的敏感度也更低。

6. 命名更易于对齐宽度,代码看起来更齐整

源自:大家对于中文变量名是如何看待的? - V2EX

中文可以等宽,这点很爽。

比如:

长 = 1
宽 = 2

温度 = 30
湿度 = 90

相比:

length = 1
width = 2

temperature = 30
humidity = 90

欢迎补充.


中文编程
在所有编程语言和领域中尝试编写中文代码,开发相关工具,总结经验,一致代码风格。包括中文命名,汉化...

烜 的读音: xuǎn

2 声望
0 粉丝
0 条评论
推荐阅读
敢问中科院计算所刘俊明副研究员:为何看不到中文编程的需求和优势?
刚看到 @IT人刘俊明 的头条文章《为何国内IT行业没有广泛采用中文编程语言》(不知为何知乎号未发此文)。作者身为中科院沈阳计算技术研究所副研究员,是如何用寥寥数百字来阐述这个大题目呢?

吴烜阅读 1.5k

Java12的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft63阅读 11.9k

Java8的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft32阅读 24.6k评论 1

一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。
前言秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景。欢迎大家参与我们的开源项目,提交PR,提高竞争力。早日上岸,升职加薪。知识点详解秒杀系统架构图秒杀流程图秒杀系统设计这篇文章一万多...

王中阳Go33阅读 2.5k评论 1

封面图
Java11的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft28阅读 15.4k评论 3

Java5的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft13阅读 20.4k

Java9的新特性
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java...

codecraft20阅读 14.5k

烜 的读音: xuǎn

2 声望
0 粉丝
宣传栏