优雅编程之这样写函数,你就“正常”了(二)

开心一笑

【儿子和爸爸看电视,剧中男主角跪下向女主角求婚。 儿子好奇地问:“爸爸,你向妈妈求婚时有没有下跪?” 爸爸:“没有。你妈妈说以后跪的机会多着呢,不差这一次。】

提出问题

代码整洁之道对函数整洁的几点总结和观点????

解决问题

下面是看《代码整洁之道》后,自己总结的几点关于函数整洁之道的总结:

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)阅读代码,自顶向下规则:每个函数后面都跟着下一个抽象层的函数;

优雅编程之这样写函数,你就“正常”了(二)_第1张图片
努力

读书感悟

来自《解忧杂货店》

  • 心,一旦离开了,就再不会回来。
  • 人与人之间情断义绝,并不需要什么具体的理由。就算表面上有,也很可能只是心已经离开的结果,事后才编造出的借口而已。因为倘若心没有离开,当将会导致关系破裂的事态发生时,理应有人努力去挽救。如果没有,说明其实关係早已破裂。
  • 这么多年咨询信看下来,让我逐渐明白一件事。很多时候,咨询的人心里已经有了答案,来咨询只是想确认自己的决定是对的。所以有些人读过回信后,会再次写信过来,大概就是因为回答的内容和他的想法不一样。
  • 就算是恨,也是一种很抽象的感情。

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎转载,点赞,顶,欢迎留下宝贵的意见,多谢支持!

你可能感兴趣的:(优雅编程之这样写函数,你就“正常”了(二))