我近期经常放出一些用中文写的类库、代码,总会招致围观,搞得我跟动物园里新来的稀有动物似的。
围观众人中有些朋友表示支持,有些朋友则不屑,甚至鄙夷,在这个MVP候选人公告中,更是有人这样评价我:
#46楼 61.172.247.* 2009-07-27 13:59 choudan[未注册用户]
看到第一位,我有点惊讶。
http://skyd.cnblogs.com/
看到中文类名、方法名、属性名,我有一种想砸电脑的感觉。。。。。
这样的编码也能评上MVP候选?
我们姑且笑而置之,我的确没什么高深的技术,但这和用中文写代码没有任何联系,从中不难看出,有些人觉得用中文写代码就是不入流的、没水准的、龌龊的、低俗的。我只想问这些人一句话:你尊重你的母语——汉语吗?
人无贵贱,语言更是没有优劣之分。没有任何人敢说英语是最优秀、最高贵的语言,其他都是劣等语言;也没有任何人曾说过写程序必须用英文(也许你说过,我没听过)。
嘲笑用中文写程序,就像是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;
}
哪个理解起来更轻松?
在这里,代码本身其实就像是一段注释,不是吗?你还要坚持用英文写程序,而在字里行间穿插中文注释吗?
另外,我不知道各位初学程序时看到代码是什么感觉,我当时感觉那堆代码就是天书、就是密码,尤其是当我连关键字、类、属性、方法等等的概念还没有的时候,那些简直是不可理解的东西,这些代码就像是程序员的“黑话”,让外行人犯晕。而假如我们的示例代码都穿插中文命名的话,是不是可以便于新手理解、降低门槛、打破神秘感呢?
此外,出于同样的原因,InfoQ中也有这样一篇文章推荐使用中文命名测试方法:
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;
}
如果你还觉得找起来费劲的话就得配花镜了。
任何语言的字符揉在一起都像一团蚂蚁,而两种语言结合起来使用就能够鲜明地区别开来,这样我们一眼扫过便可轻松明白参数的使用位置和意义。
解释一些易产生的质疑:
一些不可否认和忽视真正缺陷:
还是那句话,语言就是工具而已,不同的人喜欢不同的工具,适合自己的就是最好的。