Linus Torvalds谈代码品位:重写代码,排除特例

Linus接受了Ted演讲的采访:林纳斯•托瓦兹: Linux 操作系统之父, 采访中,主持人和他谈到代码品位的问题。展示了两段代码:

第一段,没有品位的代码:

code_no_teast

第二段,有品位的代码:

code_have_teast

这是从单向链表删除元素的函数,区别在于,第一段代码要判断“要删除的元素”是不是元素的头,而第二段并没没有做这个if判断。

原因是:如果要删除的是中间元素,那么只要把上一个元素的next指针指向下下一个元素就好了;如果要删除头元素的话,第一段代码所做的是,重新建一个头,指针指向下下个元素,然后把链表的头换成新的头;而第二段代码直接将原来的头的指针指向下下个元素了。

除了没有新开辟空间,第二段代码还好在:兼顾了所有情况,也就是不存在特殊情况的判断了。

Linus说:

这一个比较好。 它没有if语句。 这完全不影响—— 你不必了解这里为什么没有“if”语句, 你需要了解的是 有时候你可以换个角度看问题, 重写代码,排除特例, 完美覆盖所有情况。 这就是好的代码。 同时也很简单。 这是最基本的原则。 其实这都不重要—— 当然,细节非常重要。

对我来说,我愿意与之共事的人, 必须有好的品位,这就是如何…… 我举的这个例子很傻, 没什么意义,因为实在太短。 好的品位体现在更长的代码里。 好的品位体现在能看清全局 甚至有一种直觉, 知道怎么把事情做漂亮。

我在写代码时,喜欢写很多if。现在看来,这样不仅并没有提高安全性(自以为自己考虑了大多数情况),而且还变得更加繁琐。以后应该注意一下。


2018年1月2日更新:

在软件设计中,有一个原则叫做“最小惊讶原则”(Principle of Least Astonishment),可以参考这篇:http://lucumr.pocoo.org/2011/7/9/python-and-pola/ 和这篇 https://akaedu.github.io/book/ch03s03.html



Linus Torvalds谈代码品位:重写代码,排除特例”已经有2条评论

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注