代码整洁之道

来源:互联网 发布:淘宝店铺海报怎么做 编辑:程序博客网 时间:2024/05/02 01:20

Ron的整洁代码见解:
— 没有重复代码;
— 使用有意义的命名来提高表达力
— 提早构建简单抽象

童子军军规:让营地比你来时更干净!
应用到我们的专业领域就是:每次对代码的修改都比修改之前干净。这样代码就不会随时间腐坏。

取个好命名的几条简单规则:
1、名副其实,见名知意
2、做有意义的区分
如果缺少明确约定,变量moneyAmount就与money没区别,customerInfo与customer没区别,accountData与account没区别,theMessage也与message没区别。要区分名称,就要以读者
能鉴别不同之处的方式来区分。
3、使用读的出来的名称
4、使用可以搜索的名称:
单字母名称或数字变量经常有一个问题,那就是很难在一大篇代码中找出来。
5、使用描述性的名称
不要害怕长名称。长而具有描述性的名称,要比短而费解的名称好;要比描述性的注释要好。
不要害怕花时间该名称。可以尝试不同的名称,实测其阅读效果。
6、类名
类名和对象名应该是名次或者名次短语。类名不应该是动词。
7、方法名
方法名应该是动词或者动词短语。

如何写好函数:
1、函数的第一规则是要短小。第二条规则是还要更短小。
2、代码快和缩进:
if语句,else语句,while语句等,其中的代码行应该只有一行。改行大抵应该是一个函数调用语句。
这样不但能保持函数短小,而且,因为块内调用的函数拥有较具说明性的名称,从而增加了文档上的价值。
3、函数应该只做一件事:
做好这件事。只做一件事。
4、有顶向下读代码:
让代码拥有自顶向下的阅读顺序。
5、函数的参数:
最理想的参数数量是零(零参数函数),其次是一(单参数函数),再次是二(双参数函数),应尽量避免三(三参数函数)。
有足够特殊的理由才能使用三个以上参数(多参数函数)。
参数对象:当函数的参数需要三个及以上的时候,就需要将其中一些参数封装为类了。从参数创建对象,从而减少参数的数量。
6、使用异常替代返回错误码:
例如下面的情况,从函数返回错误码,导致更深层次的嵌套结构:

if (deletePage(page) == E_OK) {    if (registry.deleteReference(page.name) == E_OK) {        if (configKeys.deleteKey(page.name.makeKey()) == E_OK){            logger.log("page deleted");        } else {            logger.log("configKey not deleted");        }    } else {        logger.log("deleteReference from registry failed");    }} else {    logger.log("delete failed");    return E_ERROR;}

如果使用异常替代返回错误码,错误处理代码就能从主路径代码中分离出来,得到简化:

try {    deletePage(page);    registry.deleteReference(page.name);    configKeys.deleteKey(page.name.makeKey());}catch (Exception e) {    logger.log(e.getMessage());}

7、抽离try-catch代码快
try/catch代码块丑陋不堪。它们搞乱了代码结构,把错误处理与正常流程混为一谈。最好把try和catch代码块的主体部分抽离出来,另外形成函数。
例如的下面的代码示例:

public void delete(Page page) {    try {        deletePageAndAllReferences(page);    }    catch (Exception e) {        logError(e);    }}private void deletePageAndAllReferences(Page page) throws Exception {    deletePage(page);    registry.deleteReference(page.name);    configKeys.deleteKey(page.name.makeKey());}private void logError(Exception e) {    logger.log(e.getMessage());}

在上例中,delete函数只与错误处理有关。很容易理解然后就忽略掉。deletePageAndAllReference函数只与完全删除一个page有关。错误处理可以忽略掉。有了这样美妙的区隔,代码就更易于理解和修改了。
8、如何写出好的函数
写代码和写别的东西很像,在写论文或文章时,你先想什么就写什么,然后在打磨它,初稿也许粗陋无序,你就斟酌推敲,直到达到你心目中的样子。
不要一开始就按照规则来写代码,那样也没人能做得到。

注释:
应尽力减少注释,因为注释会撒谎,注释存在的时间越久,就离其所描述的代码越远,越来越变得全然错误。原因很简单,程序员不能坚持维护注释。
1、注释不能美化糟糕的代码:
带有少量注释的整洁而有表达力的代码,要比带有大量注释的零碎而复杂的代码像样的多,与其花时间编写解释你搞出的糟糕的代码的注释,不如花时间清洁那对糟糕的代码。
2、好注释:
有些注释是必须的,也是有利的,下面是一些值得写的注释。不过要记住:唯一真正好的注释是你想办法不去写注释。
3、直接把代码注释掉是讨厌的做法。千万别这样做。
其他人不敢删掉注释的代码。注释掉的代码堆积在一起,就像破酒瓶底的残渣一样。

待续…….

0 0