我近期经常放出一些用中文写的类库、代码,总会招致围观,搞得我跟动物园里新来的稀有动物似的。 围观众人中有些朋友表示支持,有些朋友则不屑,甚至鄙夷,在这个MVP候选人公告中,更是有人这样评价我: #46楼 61.172.247.* 2009-07-27 13:59 choudan[未注册用户] 看到第一位,我有点惊讶。 我们姑且笑而置之,我的确没什么高深的技术,但这和用中文写代码没有任何联系,从中不难看出,有些人觉得用中文写代码就是不入流的、没水准的、龌龊的、低俗的。我只想问这些人一句话:你尊重你的母语——汉语吗? 人无贵贱,语言更是没有优劣之分。没有任何人敢说英语是最优秀、最高贵的语言,其他都是劣等语言;也没有任何人曾说过写程序必须用英文(也许你说过,我没听过)。 嘲笑用中文写程序,就像是C#程序员看不起VB程序员一样,殊不知其实语言仅仅是工具而已呀。 你拿着关老爷的大刀别人会心生畏惧,这个工具很威风,但你半天砍不死只鸭子,这只会让旁人笑得比关老爷脸还红。 相比工具而言,人们更在乎你能做什么;就像武侠小说里,大侠手中草木皆兵刃,小喽啰的利剑弄不好还伤了自己;十八般兵器,用什么看你自己的喜好,能耍成什么样则要看你自己的本事。 用什么语言说话,怎可用于衡量一个人的贵贱?用什么语言编写代码,又怎能用以衡量一个程序的优劣? 有道是“存在即合理”,在某些人唏嘘之前,不妨先看看中文写代码有什么切实的好处吧: /// <summary> /// 执行充值,并返回是否成功 /// </summary> public bool RunSupplement(DatabaseEntities c) { if (Verify(this)==true) { this.UsedTime = DateTime.Now; this.UsedUser = Membership.GetUser().UserName; var p= UserProfile.GetUserInfo(this.UsedUser); p. SupplementPoint += this.Value; p.Save(); c.SaveChanges(); return true; } return false; } 再试读这段代码: /// <summary> /// 执行充值,并返回是否成功 /// </summary> public bool 执行充值(DatabaseEntities c) { if (检验有效性(this)==true) { this.使用时间 = DateTime.Now; this.使用用户 = Membership.GetUser().UserName; var p= UserProfile.获取用户信息(this.使用用户); p.充值点数 += this.面值; p.Save(); c.SaveChanges(); return true; } return false; } public static Image CutImage(Image Image, Point StartPoint, Size CutSize) { Bitmap resizedBmp = new Bitmap(CutSize.Width, CutSize.Height); Graphics g = Graphics.FromImage(resizedBmp); g.DrawImage(Image, new Rectangle(0, 0, CutSize.Width, CutSize.Height), new Rectangle(StartPoint.X, StartPoint.Y, CutSize.Width, CutSize.Height), GraphicsUnit.Pixel); return resizedBmp; } { Bitmap resizedBmp = new Bitmap(剪裁尺寸.Width, 剪裁尺寸.Height); Graphics g = Graphics.FromImage(resizedBmp); g.DrawImage(图像, new Rectangle(0, 0, 剪裁尺寸.Width, 剪裁尺寸.Height), new Rectangle(起始坐标.X, 起始坐标.Y, 剪裁尺寸.Width, 剪裁尺寸.Height), GraphicsUnit.Pixel); return resizedBmp; } 解释一些易产生的质疑: 一些不可否认和忽视真正缺陷: 还是那句话,语言就是工具而已,不同的人喜欢不同的工具,适合自己的就是最好的。
http://skyd.cnblogs.com/
看到中文类名、方法名、属性名,我有一种想砸电脑的感觉。。。。。
这样的编码也能评上MVP候选?正名
优点
咱们这些人中虽然不少人英文不错,但总也不如母语理解起来自然、高效、准确吧?
有些人英语一般,就通过查词典写出了一堆不伦不类的英文命名,数日后再看自己的代码,又要去查词典,这自己麻烦不要紧,权当学英语了,问题是这代码拿去给别人看,人家一看就头大。这时如果直截了当地使用中文命名,不就什么问题都解决了吗?
并且中文命名还可以显著减少代码注释,降低代码阅读难度。
试读这段代码(我的英文水平很烂,所以我就是只能通过查词典来写出不伦不类的命名):
哪个理解起来更轻松?
在这里,代码本身其实就像是一段注释,不是吗?你还要坚持用英文写程序,而在字里行间穿插中文注释吗?
另外,我不知道各位初学程序时看到代码是什么感觉,我当时感觉那堆代码就是天书、就是密码,尤其是当我连关键字、类、属性、方法等等的概念还没有的时候,那些简直是不可理解的东西,这些代码就像是程序员的“黑话”,让外行人犯晕。而假如我们的示例代码都穿插中文命名的话,是不是可以便于新手理解、降低门槛、打破神秘感呢?
此外,出于同样的原因,InfoQ中也有这样一篇文章推荐使用中文命名测试方法:
在英文代码中加入中文,就如同在羊群中加入奶牛一样,你总能一眼找出你加进去的东西。
当我们需要重新审视一个方法的参数的功能时,你会发现使用中文为参数命名是绝佳的做法。
还是先来看看咱的烂英文写出的方法:
如果你还觉得找起来费劲的话就得配花镜了。
任何语言的字符揉在一起都像一团蚂蚁,而两种语言结合起来使用就能够鲜明地区别开来,这样我们一眼扫过便可轻松明白参数的使用位置和意义。
汉字虽不受智能感知输入支持,但他们都乖乖地堆在智能感知提示列表最底端,这使得我们可以很方便地找到我们自定义的内容:
而我们如果用规范的英文命名的话,我们自定义的内容就会散落到整个列表的各处,极易与.Net框架内建的内容混淆,尤其是当我们无法确切记住其命名时,在这列表里找想要的内容就如同是微缩版大海捞针。所谓的缺陷
很早以前五笔就已超越英文输入速度了,而现今拼音输入法的速度也大幅提升,中文输入的速度应该是比英文更快才对,至少我是这样认为的。
如果你痛恨鼠标流,硬要通过键盘输入在智能感知列表中迅速定位中文代码的话,也是可以的,不过就得用这个权宜之策了:在中文命名前追加拼音首字母。比如将“帮助”改为“b帮助”,或“全局配置”改为“qj全局配置”。
期待微软在智能感知列表中加入拼音支持……尽管很渺茫……
这个嘛,姑且不谈中文、英文哪个更精简。其间的差异无论是从文件尺寸还是调用速度上来说,都是微乎其微的;并且你完全可以在项目编译后对其实施混淆,把命名全改为a b c d e嘛,这样还会有什么问题吗?真正的缺陷
虽然输入法的英汉切换很方便,但最大的问题是用户往往无法记住自己当前的状态,从而经常导致因弄错状态而输入错误内容,这是用中文写代码时非常头痛的问题。
如果你们的开发团队中有外籍人员,或你想将自己的代码在全世界开源分享,那么使用中文显然是不合适的。结语