優(yōu)雅編程之這樣寫函數(shù),你就“正?!绷耍ǘ?/h2>

開心一笑

【兒子和爸爸看電視,劇中男主角跪下向女主角求婚。 兒子好奇地問:“爸爸,你向媽媽求婚時有沒有下跪?” 爸爸:“沒有。你媽媽說以后跪的機會多著呢,不差這一次。】

提出問題

代碼整潔之道對函數(shù)整潔的幾點總結和觀點????

解決問題

下面是看《代碼整潔之道》后,自己總結的幾點關于函數(shù)整潔之道的總結:

1)Function should do one thing. They should do it well. They should do it only. "
(函數(shù)只應該做一件事情,把一件事情做好,而且只由它來做這一件事情);

例:

/**
 * 只做好一件事
 */
public void onlyDoOneThing(){
    
}

2)短小,以行數(shù)來要求似乎有些苛刻,一個行數(shù)在20行以內被稱為小函數(shù),或是要在5行以內才是小函數(shù),有一些極端.

3)函數(shù)中的縮進層級不應該多于一層或者兩層;

例:

/**
 * 只做一件事
 */
public void onlyDoOneThing(){
    String ay = "";
    Boolean flag = true;
    /** 第一層級 不錯 **/
    if(flag){

        /** 第二層級 還能接受 **/
        if(flag){

            /** 第三層級 沒法接受了 **/
            if(flag){
                
            }
        }
    }
}

4)函數(shù)參數(shù):應該少于2個,如果函數(shù)超過2元:應該將其中的某些參數(shù)封裝成類;

例:

/**
 * 只做一件事
 * @param arg1  參數(shù)1
 */
public void onlyDoOneThing(String arg1){
    
    System.out.println("一個參數(shù),不錯!!!");
}

/**
 * 只做一件事
 * @param arg1  參數(shù)1
 * @param arg2  參數(shù)2
 */
public void onlyDoOneThing(String arg1,String arg2){
    
    System.out.println("兩個參數(shù),能接受和理解!!!");
}

/**
 * 只做一件事
 * @param arg1  參數(shù)1
 * @param arg2  參數(shù)2
 * @param arg3  參數(shù)3
 * @param arg4  參數(shù)4             
 */
public void onlyDoOneThing(String arg1,String arg2,String arg3,String arg4){

    System.out.println("3個或3個以上的參數(shù),沒法接受!!!");
}

解決方法

Class XXX{
    private String arg3;
    privte  String arg4;
    //省略set get方法
}

5)一個函數(shù)要么做一件事(指令),要么回答一件事(詢問)

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)使用描述性的名字,函數(shù)名字:動/名詞形式;

7)分離try/catch塊:集中在一個函數(shù)中;

例:

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)閱讀代碼,自頂向下規(guī)則:每個函數(shù)后面都跟著下一個抽象層的函數(shù);

努力

讀書感悟

來自《解憂雜貨店》

  • 心,一旦離開了,就再不會回來。
  • 人與人之間情斷義絕,并不需要什么具體的理由。就算表面上有,也很可能只是心已經(jīng)離開的結果,事后才編造出的借口而已。因為倘若心沒有離開,當將會導致關系破裂的事態(tài)發(fā)生時,理應有人努力去挽救。如果沒有,說明其實關係早已破裂。
  • 這么多年咨詢信看下來,讓我逐漸明白一件事。很多時候,咨詢的人心里已經(jīng)有了答案,來咨詢只是想確認自己的決定是對的。所以有些人讀過回信后,會再次寫信過來,大概就是因為回答的內容和他的想法不一樣。
  • 就算是恨,也是一種很抽象的感情。

其他

如果有帶給你一絲絲小快樂,就讓快樂繼續(xù)傳遞下去,歡迎轉載,點贊,頂,歡迎留下寶貴的意見,多謝支持!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,021評論 25 709
  • 函數(shù)是代碼組合的基本單位,高級編程語言的發(fā)展從結構化到面向對象,再到最近大有要復興之勢的函數(shù)式編程,函數(shù)都是組成這...
    TheAlchemist閱讀 2,273評論 6 21
  • 我喝一杯我不能喝的酒 暈眩后 打碎一件琉璃雕塑 那是一支血紅的玫瑰 我知道,這是罪行 我想要,你給我一支煙, 我想...
    瓦力LY閱讀 266評論 2 2
  • 圖片發(fā)自簡書App 1 前幾日的頭條一直被南方日報成希強奸實習生的丑聞牢牢霸占,穩(wěn)居第一,隨之而來的輿論,總是讓人...
    詩意黯然的痞子閱讀 3,499評論 14 20
  • 身體不適終于恢復,運動也繼續(xù)high起來。再次調整運動時間,中午加入45分鐘午休后,神清氣爽,起來運動簡直棒棒棒!...
    阿米尼90閱讀 216評論 0 0

友情鏈接更多精彩內容