我近期常常放出一些用中文写的类库、代码,总会招致围观,搞得我跟动物园里新来的稀有动物似的。 程序员
咱们姑且笑而置之,个人确没什么高深的技术,但这和用中文写代码没有任何联系,从中不难看出,有些人以为用中文写代码就是不入流的、没水准的、龌龊的、低俗的。我只想问这些人一句话:你尊重你的母语——汉语吗?编程
人无贵贱,语言更是没有优劣之分。没有任何人敢说英语是最优秀、最高贵的语言,其余都是劣等语言;也没有任何人曾说过写程序必须用英文(也许你说过,我没听过)。框架
嘲笑用中文写程序,就像是C#程序员看不起VB程序员同样,却不知其实语言仅仅是工具而已呀。工具
你拿着关老爷的大刀别人会心生畏惧,这个工具很威风,但你半天砍不死只鸭子,这只会让旁人笑得比关老爷脸还红。测试
相比工具而言,人们更在意你能作什么;就像武侠小说里,大侠手中草木皆兵刃,小喽啰的利剑弄很差还伤了本身;十八般兵器,用什么看你本身的喜爱,能耍成什么样则要看你本身的本事。this
用什么语言说话,怎可用于衡量一我的的贵贱?用什么语言编写代码,又怎能用以衡量一个程序的优劣?spa
有道是“存在即合理”,在某些人唏嘘以前,不妨先看看中文写代码有什么切实的好处吧:code
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 }
再试读这段代码:
blog
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接口。