亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

<<代碼整潔之道(clean code)>>讀書重點筆記

發布時間:2020-07-20 08:19:11 來源:網絡 閱讀:1578 作者:落寞三少 欄目:軟件技術

整潔的代碼

1.習藝之要

   1).知:習得有關原則、模式和實踐的知識,窮盡應知之事,并且要對其了如指掌

   2).行:通過刻苦實踐掌握它


2.閱讀本書原因

  1)。你是個程序員

  2)。你想成為更好的程序員


3.勒布朗法則:

   稍后等于永不


4.花時間保持代碼整潔不但有關效率,還有關生存


5.程序員遵從不了解混亂風險的經理的意愿,也是不專業的做法


6.趕上期限的唯一方法,做得快的唯一方法----就是始終盡可能保持代碼整潔


7.破窗理論


8.整潔的代碼只做好一件事

  力求集中,每個函數、每個類、模塊都全神貫注于一事,完全不受四周細節的干擾和污染


9.整潔的代碼應當明確展現出要解決問題的張力


10.簡單代碼規則:

       按重要順序:

          .能通過所有測試

           沒有重復代碼

           體現系統中的全部設計理念

           包括盡量少的實體,比如類、方法、函數等

   無重復代碼:

        如果同一段代碼反復出現,就表示某種想法未在代碼中得到良好的體現,應該盡力

        去找出到底那是什么,然后再盡力更清晰地表達出來


 11.提高表達力

    1)。有意義的命名

    2)。只做一件事

    3)。小規模抽象


 12.想要干得快、想要早點做完、想要輕松寫代碼,先讓代碼易讀



 有意義的命名


 1.一旦發現有更好的名稱,就換掉舊的


 2.名副其實

    如果名稱需要注釋來補充,就不是名副其實


 3.避免誤導

   做有意義的區分

   使用讀得出來的名稱

   使用可搜索的名稱

      如:MAX_CLASSES_PRE_STUDENT

  

 4.類名

    類名和對象名應該是名詞或名詞短語,如Customer WikiPage Account

    AddressParser

    不應該是動詞

  

 5.方法名

     應該是動詞或動詞短語,如postPayment deletePage save

     屬性訪問器、修改器、斷言,應該根據其命名前加上get、set、is前綴



函數


1.短小是函數的第一規則


2.只做一件事,做好這件事


3.每個函數一個抽象層級

   如 getHtml() 高

      PathParser.render(pagePath) 中

      .append("\n") 低

   函數中混雜不同的抽象層級,會讓人迷惑

   自頂向下讀代碼:向下規則


4.函數參數

  最理想的參數是零(零參數函數),其次是一,盡量避免三個參數及以上的函數

  從測試角度,參數越多越難測


5.轉換結果的函數應該體現在返回值


6.應該盡量將二元函數轉換為一元函數(元:參數個數)


7.參數對象

  如果函數看來需要三個或以上參數,說明其中一些參數應該封閉為類

  如:

    Circle makeCircle(double x, double y, double radius);

    |

    Circle makeCircle(Point center, double radius);


  從參數創建對象,從而減少參數數量,當一組參數被共同傳遞,往往就是該有自己名稱的某個概念的一部分


8.動詞與關鍵詞

  給函數取好名字,能較好地解釋函數的意圖,以及參數的順序和意圖

  如一元函數 writeFile(name) 動詞/名詞


  將參數的名稱編碼成函數名,如

   assertEqual->assertExceptedEqualsActual(excepted, actual)


9.避免使用輸出參數,如果函數必須修改某種狀態,就修改所屬對象的狀態

    面向對象語言中對輸出參數的大部分需要已經消失,因為this也有輸出參數的意味


10.分隔指令與詢問

    public boolean set(String attribute, String value);

    

    if(set("username", "unclebob"))...


    上述為指令與詢問都在set函數中,應該改為

    if(attributeExists("username")) {

        setAttribute("username", "unclebob")

    }


11.使用異常替代返回錯誤碼

    try {

        deletePage(page);

        registry.deleteReference(page.name);

        configKeys.deleteKey(page.name.makeKey());

    }catch (Exception e) {

        logger.log(e.getMessage())

    }

    

    完美的隔離(try catch 代碼塊主體抽離 )


    public void delete(Page page) {

        try{

            deletePageAndAllReferences(page);

        }catch (Exception e) {

            logError(e);

        }

    }


    private void deletePageAndAllReferences(Page page) throws Exception {

        deltePage(page);

        registry.deleteReference(page.name);

        configKeys.deleteKey(page.name.makeKey());

    }


    private void logError(Exception e)

    {

        logger.log(e.getMessage());

    }


12.錯誤處理就是一件事

   如上述代碼,如果關鍵詞try在某個函數中存在,它就是該函數的第一個單詞,而且在catch/finally代碼塊后面也不該有

   其他的內容


13.依賴磁鐵

   public enum Error {

        OK,

        INVALID,

        NO_SUCH,

        LOCKED;


   }

    

   使用異常替代錯誤碼,新異常就可以從異常類派生出來,無需重新編譯或重新部署


14.重復可能是軟件中一切邪惡的根源


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灌阳县| 鄄城县| 新野县| 承德县| 襄垣县| 合作市| 体育| 香港| 云霄县| 平邑县| 江山市| 师宗县| 花莲县| 阿拉尔市| 青河县| 连州市| 安福县| 彰化县| 青神县| 通化市| 宜兰县| 栾城县| 郎溪县| 夹江县| 濉溪县| 湖南省| 米泉市| 佳木斯市| 丰顺县| 吉木萨尔县| 邢台县| 曲阜市| 敦煌市| 惠水县| 芒康县| 尉犁县| 米脂县| 萨嘎县| 沙洋县| 嘉鱼县| 通河县|