这个问题似乎是不需要讨论了。所有有点经验的程序员都会毫不犹豫的回答,当然是英文。但我今天偏要来说一说我自己的意见,并不能这么一概而论。

据某网站调查,给变量命名是程序员每天最头疼的事。所以可见不论英文或中文,给变量命名都非易事。我先给出我自己的命名规则:

1, 对所有需要阅读你代码的人来说,变量名没有歧义

2, 在此基础上越短越好

3, 对整个项目来说形式统一

先说一下第三条,很好理解,比如要用int case 就都用int case,要用下划线就都用下划线。这个就不多说了。

根据我的规则,变量名到底是用英文还是拼音,并没有太大关系。

首先一点,我们要确定阅读你代码的人群。其实这也是很多程序员说要用英文做变量名的最主要原因。很多代码是需要跨国家或地区合作的,或者需要和全世界分享的。那么,英文无疑是最好的选择。但还有很多情况下,代码只需要一部分人看懂,或者在极端一点,只需要你自己看懂,那么就只需要保证一点就可以了,那就是没有歧义。

我看过一些日本程序员的代码,他们很多人都是大大方方的直接用平假名的罗马注音来命名变量。因为人家本来就是只给日本程序员看的,我们偷看本来就是不对的。人家用平假名给变量起名,还变相的相当于给程序加密了呢。说道这里,我仿佛意识到了为什么日本没有大的国际IT公司了,但是不得不说,他们自己国内的IT公司的水平,其实一点也不比美国的差的。

有些观点认为,程序具有天生的需要给全世界共享的需求。这点我也不是很认同,也有其他具有类似属性的东西,比如论文。那我们是不是所有的论文都要用英文写,中文的论文就一点价值都没有了呢?

也有些人不用拼音的原因是用拼音的歧义较多。比如biaoGe可能是表格,也可能是表哥。这一点其实在韩语去汉字化过程中很多人都提到过。韩语的书写文字中之前存在大量的汉字,在二战后,韩国和朝鲜几乎同时改革文字,将韩语中的汉字全部去掉,只留下韩语本身的注音字符。(那些符号相当于拼音,所以只要你学会那些符号的念法和拼法,就能读出所有的韩语了)刚开始人们有些不习惯,但是现在已经很少有歧义了。

因为理解一个词的意思不光取决于读音,还取决于上下文语境。你说提交biaoGe,和我的biaoGe,相信大部分人都能理解第一说的是表格,第二个说的是表哥。其实程序跟文章一样,也是有语境的。如果想将拼音本身进一步消歧,也是有办法的,比如在拼音后面加上声调,biao3ge2,这样一下就能读出是表格了。

刚才说了为什么可以用拼音做变量名,接下来再说一些不宜使用英文做变量名的情况。

1, 英文不好的程序员,用英文做变量名反而容易闹笑话。

很多英文好的程序员指责一些英文不好的程序员变量名不用英文,这就像你看到一个人在用美图秀秀修图,然后去指责他为什么不用photoshop啊?还说英文不好可以去查字典嘛,或者上网查啊。

我们在网上经常嘲笑一些神翻译,比如把“干货”翻译成“fuck goods”,这明显就是上网机器翻译的。而英文不好的程序员上网查的话,很容易起出类似的变量名。到时候反而不如写gan1huo4能让人看懂。

如果一个团队的负责人要求团队成员必须用英文做变量名,请在招人的时候就把英文好作为一个必须的要求。

2,有些中文的词汇是无法翻译成英文的,翻译了反而让人摸不着头脑。我之前做过一段时间的网页游戏,很多网页游戏是中国武侠题材的。比如要写一个方法是降龙十八掌,如果你硬要翻译成beatingDragon18Palms,我不知道有多少人能看得懂。这就像之前中国翻译地名和路名,将北京西站翻译成Beijing west train station还是翻译成Bei Jing Xi Zhan呢?我们都理解用字母是为了外国人书写方便,但是使用的时候,对象却大部分是中国人。比如一个外国人拿着写着这两种翻译的纸条给出租车司机,让司机开到指定地点,哪种翻译更能达到目的呢?

有些人说用拼音可以,但千万不要用拼音首字母。我倒是觉得只要没有歧义,用拼音首字母也是可以的。比如降龙十八掌的方法完全可以写成xl18z,在有上下文的情况下,是完全可以看懂的。这些东西也可以约定俗成,比如程序员们都知道i18n是代表internationalization,就是多语言国际化。这个就符合我命名规则里面的第二条,越短越好。

还有些时候词汇确实有英文,但是太难太偏,大部分中国程序员都看不懂,但程序又只有中国的团队看,这种情况也可以使用拼音。比如很多医学词汇,像otorhinolaryngological department 耳鼻喉科,你这样英文写出来,所有读你程序员的人都得抱个字典读你程序。

最后我也要承认,只要能用英文的时候还是要尽量用英文。因为英文是计算机的母语。很多框架比如ruby on rails和仿照rails的cakephp,都是convention over configuration,就是让你尽量不要自己配置规则,而要用框架已经约定俗成的规则。他们规定了数据库表名必须是下划线复数,model名称必须是camelcase单数,controller名称又是camelcase的复数,这样就只能使用英语了。

还有很多文档也都是只有英文版的,想上stackoverflow上问个问题,也得用英文问。在github上跟人切磋也还是得用英文。所以想成为牛B的程序员,英文还是很重要的。我这篇文章旨在说明新手或者水平还没达到那么高的程序员们,不要硬逼自己,我们量力而行。

转载于:https://my.oschina.net/6074603/blog/1808397

程序代码中到底用英语起名还是用拼音?相关推荐

  1. vscode 快速调到定义处_vim技巧:在程序代码中快速跳转,在文件内跳转到变量定义处...

    本篇文章介绍 vim 的一些使用技巧: 在程序代码中快速跳转 在文件内跳转到变量定义处 在程序代码中快速跳转 在 vim 中查看代码文件时,可以使用下面命令在程序代码中快速跳转,提高效率. % 跳转到 ...

  2. java面试题25 在程序代码中写的注释太多,会使编译后的程序尺寸变大。

    java面试题25 在程序代码中写的注释太多,会使编译后的程序尺寸变大. A:正确 B:错误 蒙蔽树上蒙蔽果,蒙蔽树下你和我 拿到这道题,我觉得说的贼有道理,注释太多,尺寸变大.无疑与就和驾考 一样, ...

  3. 程序代码中常用英文单词使用总结

    在写面向对象程序代码时有时想不起来应该用什么单词给类命名,下面把一些常用单词列出来,供以后写程序时参考: 源/基/头 Root Source Home Base Head 获取器或查询器 Getter ...

  4. c语言程序代码中的间隔,printf()函数输出后 默认的间隔是多少

    7楼那么输出应该就可以了,不过楼主显然不是这个意思,问题的关键在于普通输出都是直接%d而它用%2d是不是这个2搞的!? ----------------解决方案-------------------- ...

  5. c语言程序代码中的间隔,c语言时间间隔代码怎么弄?

    这个是一个求时间间隔的函数,可能还不是很准确,因为是以秒数相除求解的.所以有待改进. [cpp] view plaincopy int getDay(int *diffday/*天数*/) time_ ...

  6. 寻路机器人单片机程序示例_单片机精华程序代码示例:DS1302时钟程序

    真正的熟练掌握单片机,实际操作是很重要的.多看程序,多分析,从别人规范的程序代码中学习技巧是很必要的. 硬件部分: 程序部分: main.c文件 /************************** ...

  7. 十几行程序代码搞定 Master-Detail GridView(内含子 GridView)

    摘要在网络上看到很多 GridView 内含子 GridView 的范例,虽然方法不同不过程序代码都有点小复杂,想说难道没有更简单易懂的方法吗? 在此文章中将用十几行的程序代码,就教你快速学会并搞定这 ...

  8. python程序代码_python基础二

    Python基础-注释的引入 注释的分类: <1>单行注释:以#开头,#右边的所有文字当作说明,而不是真正要执行的程序,起辅助说明作用 多行注释用三个单引号 ''' 或者三个双引号 &qu ...

  9. 程序开发中 status 还是 state

    对比: 程序开发中,两个都解释为状态: status表示关联状态的转变,例如[账户]的正常.冻结.删除: state表示非关联状态的转变,例如[枚举]: 参考: 程序代码中,怎么区分status和st ...

最新文章

  1. python建站与java建站有何不同_详解模板建站和定制建站的不同之处
  2. R语言使用str_order函数和str_sort函数对字符向量进行排序(str_order返回字符串排序的次序值(索引)、str_sort返回排序后的字符串)
  3. WebAPI 2.x中如何扩展Identity Store
  4. hive 添加UDF(user define function) hive的insert语句
  5. ios lua 增量更新,更新内部代码
  6. 查询缺少的依赖文件归属于哪个rpm包
  7. 项目管理指标_企业信息化——项目管理
  8. P3246 [HNOI2016]序列(莫队+单调栈+ST表)
  9. mysql常见数据库设计_常见数据库设计
  10. 索引体积_第16期:索引设计(MySQL 的索引结构)
  11. 单片机跑马灯代码示例
  12. RANSAC算法筛选匹配点
  13. java protected 构造方法_java中子类调用父类构造方法注意事项
  14. 安装软件出现错误处理:internal error2503/2502
  15. 通过 http-proxy-middleware 跨域代理与添加自定义cookie
  16. java中三元运算符_java中的三元运算符详解
  17. matlab设置固定的窗宽窗位,如何设定窗宽窗位,附正常人体组织CT值
  18. linux Fedora安装桌面,在Fedora Linux上安装Elementary OS桌面的方法
  19. 国际高智商组织门萨的智商测试题-谋杀你的脑细胞
  20. MoviePy合成视频没有声音

热门文章

  1. C++基础知识 - 二级指针
  2. Python——循环嵌套
  3. JAVA 时间戳与Date类型的相互转换、格式化日期、字符串日期转Date
  4. 如何使用linux系统自带的led驱动
  5. VScode调用KEIL-MDK
  6. 第五章面向对象编程设计与开发
  7. 【计算机体系结构】计算机系统结构的基本概念——基本知识要点汇总
  8. 2020年9月30日 晴
  9. 【jsPlumb】使用记录
  10. vscode配置内存,解决窗口出现故障