刚刚在网上看到一个帖子,它给出两段宣称分别由日本和中国程序员写的代码片断,用以说明两国程序员的不同素质。
代码如下:
JAPAN:
Dim gridItemIndex As Integer 'comment
Dim currentPageIndex As Integer 'comment
Dim pageSize As Integer 'comment
gridItemIndex = e.Item.ItemIndex
currentPageIndex = meisaiIchiran.CurrentPageIndex
pageSize = meisaiIchiran.PageSize
Dim updateDataRowIndex As Integer 'comment
updateDataRowIndex = (currentPageIndex * pageSize) + gridItemIndex
dt.Rows(updateDataRowIndex).Item(t.BindFldName) = txt
CHINA:
dt.Rows(.CurrentPageIndex * .PageSize + e.Item.ItemIndex).Item(t.BindFldName) = txt
从代码中可以看得出来,前者的可读性更强,后者的代码更少,执行效率更高。发贴者想用这个例子说明,日本人更讲究纪律,而中国人更加"聪明"。这个问题引起了很多人的争论,我也想凑一下热闹,谈谈自己对这个问题的看法。
大家都知道,代码由人来编写维护,由机器来执行。所以它总是牵扯到问题的两个方面:可读性与运行时效率。这两者在某种程度上是矛盾的。
在早期,机器资源非常有限,所以评判一个优秀程序员的标准是,谁的代码编译后size更小,运行时性能更高。即使在今天,低端嵌入式领域在很大程度上仍然如此。
但对于当代的绝大多数非嵌入式领域而言,机器资源已经不是关键问题,而系统的规模却比以前庞大复杂的多。对于复杂的系统,维护问题显得更加重要。所以,当今行业内对于代码的要求更加偏重于良好的可读性。
对于这个问题的认识,大师们总是先行一步,Dijkstra在1972图灵奖颁奖典礼上就说过:"优秀的程序员很清楚自己的能力是有限的,所以他对待编程任务的态度是完全谦卑的,特别是,他们会象逃避瘟疫那样逃避 ‘聪明的技巧'"。Martin Fowler在他的经典著作《重构》中提到,根据局部性原理,一个系统80%的时间运行在20%的代码上,所以只有一小部分的代码才会面临性能问题,而对于所有的程序,可维护性才是最重要的。对于那些面临性能的问题的代码,重构理论的建议也是,同样要以可维护为目标来编写,然后通过测试来找到真正影响性能的部分,并修改它。换句话说,除非有必要,否则,可维护性就是首要因素。
回到上面的两段代码,前者可读性更强,而可读性是可维护性的一项指标,所以前者更加符合现代代码编写方法的要求。
但是,我个人觉得两段代码都太极端了。"过犹不及"。其实完全可以在不损失可读性的前提下让代码更有效率。我不知道上面代码使用的语言是什么(或许是VB?),Anyway,请允许我冒昧的写出自己的实现。
Dim updateDataRowIndex As Integer 'comment
updateDataRowIndex =
.CurrentPageIndex * .PageSize
+ e.Item.ItemIndex
dt.Rows(updateDataRowIndex).Item(t.BindFldName) = txt
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=699600