代码整洁之道 -- 更好地给函数命名

2022-03-06  本文已影响0人  llkevin13579

        在编程中,第一个学的是有意义的命名,那么第二个使用比较多的应该就是函数了,函数命名的好坏也对一个工程开发的效率起着很重要的作用。

一、函数的参数个数

        最理想的参数数量是0(零参数函数),其次是1(单参数函数),再次是2(双参数函数),应尽量避免3(三参数函数),有足够特殊的理由才能用3个以上的参数(多参数函数)。

        先说说单参数函数,比如一个函数这样调用:render(true),对于读者来说是不是有点懵逼,true?什么true?如果这个函数我只是想知道大概意思,写成这样就一定要点进去函数去查看了,是不是很麻烦?点进去看到函数的定义render(Boolean isSuite)我们才大概搞懂了这个函数参数的含义。如果把这个函数拆成renderForSuite()和renderForSingleTest(),就舒服很多了。

       再看看双参数函数,writeField(name)比writeField(outputStream, name),是不是writeField更加直接一点?带上outputStream的话,开发者还需要看这个stream是使用什么格式的,各种复杂的文档查询。另外就是在日常开发的时候,经常看到同事写类似断言的函数,比如Jest里面,写了一个isEquals(a, b),我不止一次遇到这样类似的函数,究竟第一个是期望值,还是实际值呢?每次都需要点进去函数去查看,十分的麻烦,如果在函数的命名上我们更人性化一些,这样的阅读就会更加舒服一些了,比如把它改成isExpectedEqualsToActual(a,b),读者无需查看详细的函数定义就知道这个函数参数的定义了。

二、 使用异常代替返回错误码

在多次条件判断的时候,如果异常判断比较复杂,比较容易出现一种情况,就是多重嵌套,多重嵌套处理起来是特别麻烦的一件事,比如:

if (deletePage(page) == 'success') {

    if (registry.deleteReference(page.name) == 'success') {

        if (keys.deleteKey(page.name.makeKey() == 'success') ) {

            logger.log("page deleted");

        } else {

            logger.log("key not deleted");

        }

    } else {

        logger.log("deleteReference from registry failed");

    } else {

        logger.log("deleted fail")

    }

}

如果我们使用异常捕获代替错误码,这样逻辑就得到了简化:

try {

    deletePage(page);

    registry.deleteReference(page.name);

    keys.deleteKey(page.name.makeKey() ;

}

catch(Exception e) {

    logger.log(e.getMessage());

}

三、

上一篇 下一篇

猜你喜欢

热点阅读