我近期经常放出一些用中文写的类库、代码,总会招致围观,搞得我跟动物园里新来的稀有动物似的。
我们姑且笑而置之,我的确没什么高深的技术,但这和用中文写代码没有任何联系,从中不难看出,有些人觉得用中文写代码就是不入流的、没水准的、龌龊的、低俗的。我只想问这些人一句话:你尊重你的母语——汉语吗?
人无贵贱,语言更是没有优劣之分。没有任何人敢说英语是最优秀、最高贵的语言,其他都是劣等语言;也没有任何人曾说过写程序必须用英文(也许你说过,我没听过)。
嘲笑用中文写程序,就像是C#程序员看不起VB程序员一样,殊不知其实语言仅仅是工具而已呀。
你拿着关老爷的大刀别人会心生畏惧,这个工具很威风,但你半天砍不死只鸭子,这只会让旁人笑得比关老爷脸还红。
相比工具而言,人们更在乎你能做什么;就像武侠小说里,大侠手中草木皆兵刃,小喽啰的利剑弄不好还伤了自己;十八般兵器,用什么看你自己的喜好,能耍成什么样则要看你自己的本事。
用什么语言说话,怎可用于衡量一个人的贵贱?用什么语言编写代码,又怎能用以衡量一个程序的优劣?
有道是“存在即合理”,在某些人唏嘘之前,不妨先看看中文写代码有什么切实的好处吧:
1 /// <summary> 2 3 /// 执行充值,并返回是否成功 4 5 /// </summary> 6 7 public bool RunSupplement(DatabaseEntities c) 8 9 { 10 11 if (Verify(this)==true) 12 13 { 14 15 this.UsedTime = DateTime.Now; 16 17 this.UsedUser = Membership.GetUser().UserName; 18 19 var p= UserProfile.GetUserInfo(this.UsedUser); 20 21 p. SupplementPoint += this.Value; 22 23 p.Save(); 24 25 c.SaveChanges(); 26 27 return true; 28 29 } 30 31 return false; 32 33 }
再试读这段代码:
1 /// <summary> 2 3 /// 执行充值,并返回是否成功 4 5 /// </summary> 6 7 public bool 执行充值(DatabaseEntities c) 8 9 { 10 11 if (检验有效性(this)==true) 12 13 { 14 15 this.使用时间 = DateTime.Now; 16 17 this.使用用户 = Membership.GetUser().UserName; 18 19 var p= UserProfile.获取用户信息(this.使用用户); 20 21 p.充值点数 += this.面值; 22 23 p.Save(); 24 25 c.SaveChanges(); 26 27 return true; 28 29 } 30 31 return false; 32 33 }
哪个理解起来更轻松?
在这里,代码本身其实就像是一段注释,不是吗?你还要坚持用英文写程序,而在字里行间穿插中文注释吗?
另外,我不知道各位初学程序时看到代码是什么感觉,我当时感觉那堆代码就是天书、就是密码,尤其是当我连关键字、类、属性、方法等等的概念还没有的时候,那些简直是不可理解的东西,这些代码就像是程序员的“黑话”,让外行人犯晕。而假如我们的示例代码都穿插中文命名的话,是不是可以便于新手理解、降低门槛、打破神秘感呢?
此外,出于同样的原因,InfoQ中也有这样一篇文章推荐使用中文命名测试方法:
1 public static Image CutImage(Image Image, Point StartPoint, Size CutSize) 2 3 { 4 5 Bitmap resizedBmp = new Bitmap(CutSize.Width, CutSize.Height); 6 7 Graphics g = Graphics.FromImage(resizedBmp); 8 9 g.DrawImage(Image, new Rectangle(0, 0, CutSize.Width, CutSize.Height), new Rectangle(StartPoint.X, StartPoint.Y, CutSize.Width, CutSize.Height), GraphicsUnit.Pixel); 10 11 return resizedBmp; 12 13 }
这样一小坨代码虽然很简单,但你要找到参数被使用的位置还是有点头疼的,而如果它们变成“奶牛”的话……
1 public static Image 剪裁图像(Image 图像, Point 起始坐标, Size 剪裁尺寸) 2 3 { 4 5 Bitmap resizedBmp = new Bitmap(剪裁尺寸.Width, 剪裁尺寸.Height); 6 7 Graphics g = Graphics.FromImage(resizedBmp); 8 9 g.DrawImage(图像, new Rectangle(0, 0, 剪裁尺寸.Width, 剪裁尺寸.Height), new Rectangle(起始坐标.X, 起始坐标.Y, 剪裁尺寸.Width, 剪裁尺寸.Height), GraphicsUnit.Pixel); 10 11 return resizedBmp; 12 13 }
如果你还觉得找起来费劲的话就得配花镜了。
任何语言的字符揉在一起都像一团蚂蚁,而两种语言结合起来使用就能够鲜明地区别开来,这样我们一眼扫过便可轻松明白参数的使用位置和意义。
解释一些易产生的质疑:
一些不可否认和忽视真正缺陷:
还是那句话,语言就是工具而已,不同的人喜欢不同的工具,适合自己的就是最好的。
————————————————————————————————————————————
给所有人的回复:
有些人会错我的意思了,我没有占据什么道德制高点,我说的是歧视用中文编程的人不尊重汉语,而不是说不赞成用中文编程的人,这是有区别的。
文中我也说了,语言就是工具而已,适合自己的就是最好的,每个人的习惯、工作环境不同,需求也就不同,强求是没有意义的,所以你用英文、拼音、中文、混合使用都无所谓。可以各执己见,可以交流探讨各自优劣点,但不该歧视、攻击。
有人说穿插中文命名的示例代码会误导初学者,让他们以为学英文没必要,我觉得还没那么容易就误导了谁,该学的总会学,不愿学的还是不学,个人有个人的需求了。
而且,反过来说,大家想想印度为何软件发展如此迅猛呢?因为他们官方语言为英语,普通民众觉得编程就像说话那么简单,从而产生兴趣,继而成为职业。我们以母语来做示例,打破高墙,也许也会让更多国人从此跨入编程之门,这不是更好地达成分享知识的目的吗?(有人列举了日本Ruby使用英文的例子,这个很好理解,日本基本人人英文都很好,而日语和英语都没什么使用障碍的话,肯定是选英语更为通用些。日本人不会为了民族情感而牺牲实用性,我们也不该为了中文而中文,凡事有度,适用为上)
还有人指责中文的接口在国际上不通用的问题,这个我在文中早就说了中文写代码不适合国际化应用,并且接口本身就应该是个通用的东西,你完全可以中文写类,英文写接口呀,这更能体现接口的本来意义吧。就像USB接口一样,别管美国产的、中国产的东西,符合接口就可以插,仿制个长信宫灯插上都没问题,所以中国厂商即使所有材料、工艺都是中国的,也会使用这个接口来保证设备通用性,而不是自定义一个有中国特色的社会主义USB接口。
原文:https://www.cnblogs.com/itliuyang/p/10024777.html