zoukankan      html  css  js  c++  java
  • 中文写程序,何陋之有?

    我近期经常放出一些用中文写的类库、代码,总会招致围观,搞得我跟动物园里新来的稀有动物似的。

    我们姑且笑而置之,我的确没什么高深的技术,但这和用中文写代码没有任何联系,从中不难看出,有些人觉得用中文写代码就是不入流的、没水准的、龌龊的、低俗的。我只想问这些人一句话:你尊重你的母语——汉语吗?

    正名

    人无贵贱,语言更是没有优劣之分。没有任何人敢说英语是最优秀、最高贵的语言,其他都是劣等语言;也没有任何人曾说过写程序必须用英文(也许你说过,我没听过)。

    嘲笑用中文写程序,就像是C#程序员看不起VB程序员一样,殊不知其实语言仅仅是工具而已呀。

    你拿着关老爷的大刀别人会心生畏惧,这个工具很威风,但你半天砍不死只鸭子,这只会让旁人笑得比关老爷脸还红。

    相比工具而言,人们更在乎你能做什么;就像武侠小说里,大侠手中草木皆兵刃,小喽啰的利剑弄不好还伤了自己;十八般兵器,用什么看你自己的喜好,能耍成什么样则要看你自己的本事。

    用什么语言说话,怎可用于衡量一个人的贵贱?用什么语言编写代码,又怎能用以衡量一个程序的优劣?

    有道是“存在即合理”,在某些人唏嘘之前,不妨先看看中文写代码有什么切实的好处吧:

    优点

    1. 易于理解。
      咱们这些人中虽然不少人英文不错,但总也不如母语理解起来自然、高效、准确吧?
      有些人英语一般,就通过查词典写出了一堆不伦不类的英文命名,数日后再看自己的代码,又要去查词典,这自己麻烦不要紧,权当学英语了,问题是这代码拿去给别人看,人家一看就头大。这时如果直截了当地使用中文命名,不就什么问题都解决了吗?
      并且中文命名还可以显著减少代码注释,降低代码阅读难度。
      试读这段代码(我的英文水平很烂,所以我就是只能通过查词典来写出不伦不类的命名):
    2.  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中也有这样一篇文章推荐使用中文命名测试方法:

    3. 在英文代码之间清晰可辨。
      在英文代码中加入中文,就如同在羊群中加入奶牛一样,你总能一眼找出你加进去的东西。
      当我们需要重新审视一个方法的参数的功能时,你会发现使用中文为参数命名是绝佳的做法。
      还是先来看看咱的烂英文写出的方法:
       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 }



      如果你还觉得找起来费劲的话就得配花镜了。
      任何语言的字符揉在一起都像一团蚂蚁,而两种语言结合起来使用就能够鲜明地区别开来,这样我们一眼扫过便可轻松明白参数的使用位置和意义。

    4. 在VisualStudio的智能感知提示中与.Net框架内容区别开来。
      汉字虽不受智能感知输入支持,但他们都乖乖地堆在智能感知提示列表最底端,这使得我们可以很方便地找到我们自定义的内容:

      而我们如果用规范的英文命名的话,我们自定义的内容就会散落到整个列表的各处,极易与.Net框架内建的内容混淆,尤其是当我们无法确切记住其命名时,在这列表里找想要的内容就如同是微缩版大海捞针。

    所谓的缺陷

    解释一些易产生的质疑:

    1. 中文输入慢。
      很早以前五笔就已超越英文输入速度了,而现今拼音输入法的速度也大幅提升,中文输入的速度应该是比英文更快才对,至少我是这样认为的。
    2. 无法享受VisualStudio智能感知输入支持。
      如果你痛恨鼠标流,硬要通过键盘输入在智能感知列表中迅速定位中文代码的话,也是可以的,不过就得用这个权宜之策了:在中文命名前追加拼音首字母。比如将“帮助”改为“b帮助”,或“全局配置”改为“qj全局配置”。
      期待微软在智能感知列表中加入拼音支持……尽管很渺茫……
    3. 中文命名过长导致文件增大、调用迟缓。
      这个嘛,姑且不谈中文、英文哪个更精简。其间的差异无论是从文件尺寸还是调用速度上来说,都是微乎其微的;并且你完全可以在项目编译后对其实施混淆,把命名全改为a b c d e嘛,这样还会有什么问题吗?

    真正的缺陷

     一些不可否认和忽视真正缺陷:

    1. 输入法开闭状态不易把持。
      虽然输入法的英汉切换很方便,但最大的问题是用户往往无法记住自己当前的状态,从而经常导致因弄错状态而输入错误内容,这是用中文写代码时非常头痛的问题。
    2. 不适合国际化交流。
      如果你们的开发团队中有外籍人员,或你想将自己的代码在全世界开源分享,那么使用中文显然是不合适的。

    结语

    还是那句话,语言就是工具而已,不同的人喜欢不同的工具,适合自己的就是最好的。


    ————————————————————————————————————————————

    给所有人的回复:


    有些人会错我的意思了,我没有占据什么道德制高点,我说的是歧视用中文编程的人不尊重汉语,而不是说不赞成用中文编程的人,这是有区别的。


    文中我也说了,语言就是工具而已,适合自己的就是最好的,每个人的习惯、工作环境不同,需求也就不同,强求是没有意义的,所以你用英文、拼音、中文、混合使用都无所谓。可以各执己见,可以交流探讨各自优劣点,但不该歧视、攻击。

    有人说穿插中文命名的示例代码会误导初学者,让他们以为学英文没必要,我觉得还没那么容易就误导了谁,该学的总会学,不愿学的还是不学,个人有个人的需求了。


    而且,反过来说,大家想想印度为何软件发展如此迅猛呢?因为他们官方语言为英语,普通民众觉得编程就像说话那么简单,从而产生兴趣,继而成为职业。我们以母语来做示例,打破高墙,也许也会让更多国人从此跨入编程之门,这不是更好地达成分享知识的目的吗?(有人列举了日本Ruby使用英文的例子,这个很好理解,日本基本人人英文都很好,而日语和英语都没什么使用障碍的话,肯定是选英语更为通用些。日本人不会为了民族情感而牺牲实用性,我们也不该为了中文而中文,凡事有度,适用为上)


    还有人指责中文的接口在国际上不通用的问题,这个我在文中早就说了中文写代码不适合国际化应用,并且接口本身就应该是个通用的东西,你完全可以中文写类,英文写接口呀,这更能体现接口的本来意义吧。就像USB接口一样,别管美国产的、中国产的东西,符合接口就可以插,仿制个长信宫灯插上都没问题,所以中国厂商即使所有材料、工艺都是中国的,也会使用这个接口来保证设备通用性,而不是自定义一个有中国特色的社会主义USB接口。


     

  • 相关阅读:
    Centos 7 zabbix 实战应用
    Centos7 Zabbix添加主机、图形、触发器
    Centos7 Zabbix监控部署
    Centos7 Ntp 时间服务器
    Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut
    Kickstart 安装centos7
    Centos7与Centos6的区别
    Linux 150命令之 文件和目录操作命令 chattr lsattr find
    Linux 发展史与vm安装linux centos 6.9
    Linux介绍
  • 原文地址:https://www.cnblogs.com/itliuyang/p/10024777.html
Copyright © 2011-2022 走看看