多小才算小

失业在家,闲来无事,终于有时间可以读上几本,在公司里不太适合读的书, 特别是鲍勃大叔的代码简洁之道(clean code)。之所以说它在公司里不适合读,因为这类书的目的不在于帮助解决紧急棘手的问题,而是为了提高程序员的个人修养,特别是对那些不满足能用就行,而中意于在代码中追求美与快乐的人。书中,他提了很多建议,比如说,方法(function)要小的,类(class)要小的,单元测试(unit test)也要小的,可究竟多小才算小,三行,五行,还是十多行?

短小精悍的东西,有很多优点。首先是它看了让人一目了然,看着舒坦,看着愉悦。其次,浓缩的都是精华,它们只专注于应该做的,并且做的最干净利落,最完美无瑕。最后,他们有可能让一切变得更加井井有条,你是喜欢把所有的东西塞进同一层抽屉里,乱如麻,还是归类存放,便入查找,维护和管理?反正我是偏爱后一个。

大叔重复强调,我们第一条规则,是要小,第二条规则,是要更小。可多小才算小呢?其实,这就像某广告语说的一样,没有最好,只有更好。这里说的是一种态度,是一种追求简洁代码的态度。

对于一个方法来说,如果它只做一件事,那么它就可以算得上足够小了。判别一个方法是不是在做一件事,要看它的每一小步操作是不是在同一抽象层面上。打个比方,说要把大象装冰箱里,三步就可以搞定。打开冰箱门,把大象装进去,把门关上。这三小步,就是在做一件事,我们这里不要关注门是如何打开,关上的,也不关注大象是怎么进去的。对于一个类来说,也不能用行数的多少来判定它的大小,这里要看它担负的责任的多少,一个是少,多于一个就是多了。

写到这,不禁想起了,老子道德经中的那句话:少则得,多则惑。