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

简介: 相比英文命名, 一些中文命名的优势. Some advantages with Chinese naming compared to English naming.

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

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

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

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

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

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

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

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

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在两层循环中容易混淆等等, 而中文单字(如'甲', '乙', '丙', '丁'等等)没有这样的问题

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

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

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

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

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

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

欢迎补充.

相关文章
|
6月前
|
编译器 C++ 开发者
在C++语言中声明语言的作用类型
在C++语言中声明语言的作用类型
56 0
|
22天前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
41 3
|
5月前
|
缓存 监控 程序员
Python中的装饰器是一种特殊类型的声明,它允许程序员在不修改原有函数或类代码的基础上,通过在函数定义前添加额外的逻辑来增强或修改其行为。
【6月更文挑战第30天】Python装饰器是无侵入性地增强函数行为的工具,它们是接收函数并返回新函数的可调用对象。通过`@decorator`语法,可以在不修改原函数代码的情况下,添加如日志、性能监控等功能。装饰器促进代码复用、模块化,并保持源代码整洁。例如,`timer_decorator`能测量函数运行时间,展示其灵活性。
48 0
|
4月前
|
机器学习/深度学习 自然语言处理 JavaScript
无类型语言的例子
【7月更文挑战第14天】本文介绍编程语言类型系统的分类。编程语言依据类型系统分为有类型、弱类型和无类型。类型系统的探讨涉及抽象语法、语义和运行时行为。
50 2
|
6月前
|
编译器 C++
在C++语言中函数的定义
在C++语言中函数的定义
59 0
|
6月前
火山中文编程 -- 类、方法、参数
火山中文编程 -- 类、方法、参数
211 0
|
存储 Java
[初始java]——规范你的命名规则,变量的使用和注意事项,隐式转化和强制转化
[初始java]——规范你的命名规则,变量的使用和注意事项,隐式转化和强制转化
|
Java 程序员 索引
Python私有化及_下划线命名用途
Python中没有真正的私有属性或方法,没有真正的私有化,但有一些和命名有关的约定,让编程人员处理一些需要私有化的情况,我们常常需要区分私有方法、属性和公有方法、属性以方便管理和调用。那么在Python中如何做呢?
|
Java Linux 开发工具
JavaSE (二)原生数据类型(变量与变量的定义、注释)等说明
JavaSE 原生数据类型(变量与变量的定义、注释)等说明
|
前端开发 Swift 数据安全/隐私保护
Swift实用小册01:参数声明、数据类型、命名方式、代码注释
Swift实用小册01:参数声明、数据类型、命名方式、代码注释
235 1