开心一笑
【儿子和爸爸看电视,剧中男主角跪下向女主角求婚。 儿子好奇地问:“爸爸,你向妈妈求婚时有没有下跪?” 爸爸:“没有。你妈妈说以后跪的机会多着呢,不差这一次。】
提出问题
代码整洁之道对函数整洁的几点总结和观点????
解决问题
下面是看《代码整洁之道》后,自己总结的几点关于函数整洁之道的总结:
1)Function should do one thing. They should do it well. They should do it only. "
(函数只应该做一件事情,把一件事情做好,而且只由它来做这一件事情);
例:
/**
* 只做好一件事
*/
public void onlyDoOneThing(){
}
2)短小,以行数来要求似乎有些苛刻,一个行数在20行以内被称为小函数,或是要在5行以内才是小函数,有一些极端.
3)函数中的缩进层级不应该多于一层或者两层;
例:
/**
* 只做一件事
*/
public void onlyDoOneThing(){
String ay = "";
Boolean flag = true;
/** 第一层级 不错 **/
if(flag){
/** 第二层级 还能接受 **/
if(flag){
/** 第三层级 没法接受了 **/
if(flag){
}
}
}
}
4)函数参数:应该少于2个,如果函数超过2元:应该将其中的某些参数封装成类;
例:
/**
* 只做一件事
* @param arg1 参数1
*/
public void onlyDoOneThing(String arg1){
System.out.println("一个参数,不错!!!");
}
/**
* 只做一件事
* @param arg1 参数1
* @param arg2 参数2
*/
public void onlyDoOneThing(String arg1,String arg2){
System.out.println("两个参数,能接受和理解!!!");
}
/**
* 只做一件事
* @param arg1 参数1
* @param arg2 参数2
* @param arg3 参数3
* @param arg4 参数4
*/
public void onlyDoOneThing(String arg1,String arg2,String arg3,String arg4){
System.out.println("3个或3个以上的参数,没法接受!!!");
}
解决方法
Class XXX{
private String arg3;
privte String arg4;
//省略set get方法
}
5)一个函数要么做一件事(指令),要么回答一件事(询问)
package com.hwy.test;
/**
* 代码整洁之道
* Created by Ay on 2016/7/11.
*/
public class CodeCleanTest {
public static void main(String[] args) {
/** 约会 **/
engagementWithMe();
/** 表白(询问) **/
boolean isMerryMe = canMerryMe();
if(isMerryMe){
/** 结婚(指令) **/
getMarried();
}
}
/**
* 约会
*/
public static void engagementWithMe(){
System.out.println("约会");
}
/**
* 表白
*/
public static boolean canMerryMe(){
return true;
}
/**
* 结婚
*/
public static void getMarried(){
System.out.println("结婚");
}
}
6)使用描述性的名字,函数名字:动/名词形式;
7)分离try/catch块:集中在一个函数中;
例:
package com.hwy.test;
/**
* 代码整洁之道
* Created by Ay on 2016/7/11.
*/
public class CodeCleanTest {
public static void main(String[] args) {
try{
/** 约会 **/
engagementWith();
}catch (Exception e){
logError(e);
}
}
/**
* 约会
*/
public static void engagementWith(){
System.out.println("约会");
}
/**
* 处理异常
* @param e
*/
public static void logError(Exception e){
System.out.println(e.getMessage());
}
}
8)使用异常代替返回错误码:这样错误代码可以从主路径代码中分离出来,避免嵌套;
/**
* 更新决策
* @param dePolicyDecisionDTO
* @return
* @throws IllegalAccessException
* @throws NoSuchMethodException
* @throws InvocationTargetException
*/
@Override
public DePolicyDecisionDTO update(DePolicyDecisionDTO dePolicyDecisionDTO) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
DePolicyDecision exists = policyDecisionRepository.findByMatterNameAndType(dePolicyDecisionDTO.getMatterName(), dePolicyDecisionDTO.getType());
if(exists!=null&&!exists.getId().equals(dePolicyDecisionDTO.getId())){
/** 这里使用异常,错误代码可以从主路径代码中分离出来,BusinessExceptio是公司自己封装的异常类 **/
throw new BusinessException(ErrorCode.De.alreadyTypeExists);
}
DePolicyDecision dePolicyDecision = new DePolicyDecision();
PropertyUtils.copyProperties(dePolicyDecision, dePolicyDecisionDTO);
policyDecisionRepository.saveAndFlush(dePolicyDecision);
return policyDecisionDAO.findDtoById(dePolicyDecisionDTO.getId());
}
9)阅读代码,自顶向下规则:每个函数后面都跟着下一个抽象层的函数;
读书感悟
来自《解忧杂货店》
- 心,一旦离开了,就再不会回来。
- 人与人之间情断义绝,并不需要什么具体的理由。就算表面上有,也很可能只是心已经离开的结果,事后才编造出的借口而已。因为倘若心没有离开,当将会导致关系破裂的事态发生时,理应有人努力去挽救。如果没有,说明其实关係早已破裂。
- 这么多年咨询信看下来,让我逐渐明白一件事。很多时候,咨询的人心里已经有了答案,来咨询只是想确认自己的决定是对的。所以有些人读过回信后,会再次写信过来,大概就是因为回答的内容和他的想法不一样。
- 就算是恨,也是一种很抽象的感情。
其他
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎转载,点赞,顶,欢迎留下宝贵的意见,多谢支持!