在编程中,第一个学的是有意义的命名,那么第二个使用比较多的应该就是函数了,函数命名的好坏也对一个工程开发的效率起着很重要的作用。
一、函数的参数个数
最理想的参数数量是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());
}
三、
网友评论