-----------------Clean Code Chapter3 Function--------------------
==================shuxiangguo=======================
1、函数的第一规则是要短小。第二规则是还要短小。
2、函数应该只做一件事。做好这件事。
3、每个函数在一个抽象层级
自定向下读代码:向下规则-->让每个函数后面都跟着位于下一抽象层级的函数。
4、使用描述性的名称。
5、函数参数:最理想的参数数量是零。从测试的角度来看,参数越多,考虑的测试情形就越多。
6、分割指令与询问。函数要么做一件事,要么回答什么事,但二者不可得兼。
7、使用异常替代返回错误码
如果使用异常代替返回错误码,错误处理代码就能从主路径代码中分离出来,得到简化。
例:
不好的代码: 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("deletedReference 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); }
8、抽离try/catch代码块
例:
public void delete(Page page) { try { deletePageAndAllReferences(page); } catch(Exception e) { logError(e); } } private void deletePageAndAllReferences(page) throws Exception { deletePage(page); registry.deleteReference(page.name); configKeys.deleteKey(paga.name.makeKey); } private void logError(Exception e) { logger.log(e.getMessage);; }
将try/catch里面的代码用函数调用取代,实现代码分离。