摘要:引言列舉一些編碼過程中重構的目標雖然不難理解但確實蠻實用的平時編碼中有些經常遇到。說明第一種方式通過設置的方式代碼不易讀而重構后的代碼簡介明了。
引言
用return 退出多重循環列舉一些編碼過程中重構的目標,雖然不難理解,但確實蠻實用的,平時編碼中有些經常遇到。
常見的就是二重for循環標記break退出。
let func=function () { let flag=false; for(let i=0;i<100;i++){ for(let j=0;j<100;j++){ if(i*j>30){ flag=true; break; } } if(flag==true){ break; } } } let func=function () { let flag=false; for(let i=0;i<100;i++){ for(let j=0;j<100;j++){ if(i*j>30){ return; } } } }
說明 第一種 方式通過設置flag的方式,代碼不易讀,而重構后的代碼簡介明了。其次如果return后還要一些邏輯要執行,可以把要執行的邏輯封裝成函數放到return后面。
大型類的分解let Attack=function (hero) { this.hero=hero; } Attack.prototype.start=function (type) { return this.list[type].call(this); } Attack.prototype.list={ q:function () { console.log("q skill") }, w:function () { console.log("w skill") } }; let Hero=function (name) { this.name=name; this.attackObj=new Attack(this); } Hero.prototype.attack=function (type) { this.attackObj.start(type); } let gaiLunIns=new Hero("GaiLun"); gaiLunIns.attack("q");
說明 函數式編程中我們會將復雜邏輯拆成一個個可處理的最小單元,而在面向對象中合理利用設計模式,可以極大的解耦我們的代碼,
上述實例中,攻擊功能比較復雜,多帶帶封裝成一個類,技能維護成一個列表,拓展性強,整個攻擊邏輯不摻和在hero當中,hero顯得也非常精簡。
少用并不是說不用,適當的地方使用,例如下面的判斷條件簡單且清晰
let global=typeof window != "undefined" ? window:this;
但是如果嵌套很多層,就不提倡,不易閱讀和維護。
減少函數參數的數量函數參數多,就容易給使用者帶來復雜度,合理的編碼,利用一些設計模式,例如典型的策略模式,而不應該保留過多條件在函數參數中,
復雜的邏輯內部應該封裝起來。還要就是函數參數應該用一個對象來傳遞,例如vue,handsontable等等,這些工具實例化時傳遞的都是option對象,
工具內部做了一些默認處理,并且我們傳遞的參數時,也不用關心順序和個數。
let getPrice=function (price) { var date=new Date(); if(date.getMonth()>=6&&date.getMonth()<=9){ return price*0.8 } } let isSummer=function () { let date=new Date(); return date.getMonth()>=6&&date.getMonth()<=9 } let getPrice=function (price) { var date=new Date(); if(isSummer()){ return price*0.8 } return price; }
說明 復雜的條件語句增加維護難度,不易閱讀,而函數更能清晰的表達代碼含義,如果命名良好,基本就不用加注釋了。
一等函數http.post("/add/article",function(){ …… }); http.post("/add/article",callback);
說明 上面不傳遞一個具體匿名函數的好處是,方便解耦和以后不確定增加的維護難度,函數式編程中一等函數的應用好處其實有很多。
總結設計模式和重構行為,都不是必須的,但是這都是一個程序員基本的涵養,重構有很多方面,我只是列舉了其中幾點,還有一些常見的比如用對象或函數式封裝變量,模塊化封裝一組功能等等,上面的示例中,有些情況
在平常編碼中不注意也會出現上面的情況,總結一下,也算是加深一下自己的認知吧。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83122.html
摘要:無論如何,單元測試一直是一中非常重要卻常常被忽視的技能。在實踐中,重構的要求是很高的它需要有足夠詳盡的單元測試,需要有持續集成的環境,需要隨時隨地在小步伐地永遠讓代碼處于可工作狀態下去進行改善。 showImg(https://segmentfault.com/img/bVbttWF?w=1000&h=528); 五月初的時候朋友和我說《重構》出第 2 版了,我才興沖沖地下單,花了一個...
摘要:改進代碼設計的一個重要原則就是消除重復代碼使軟件更容易被理解優秀的代碼能夠讓接收你代碼的付出更少的學習成本。重構更容易找到重構能加深對代碼的理解。可以重構的情況添加功能時可以重構。說明你沒有發現代碼的錯誤。需要重構復審代碼時可以重構。 為何重構 重構不是銀彈,但是幫助你達到以下幾個目的 改進軟件設計 不良的程序需要更多的代碼。而代碼越多,正確的修改就越困難。改進代碼設計的一個重要原則就...
摘要:難以通過重構手法完成設計的改動先想像重構的情況。何時不該重構現有代碼根本不能正常運作。現在,我可以修改這個子類而不必承擔午一中影響另一處的風險。 重構:對軟件內部結構的一種調整,目的是再不改變軟件的可觀察行為的前提下,提高其可理解性,降低其修改成本。 兩頂帽子 添加新功能 添加新功能時不應該修改既有代碼,只管添加新功能,通過測試重構 重構時你就不能再添加功能,只管改進程序結構,此時...
摘要:重構改善既有代碼設計動詞使用一系列重構手法,在不改變軟件可觀察行為的前提下,調整其結構。修補錯誤時重構代碼時重構怎么重構關于代碼的重構技巧參考重構改善既有代碼設計讀書筆記代碼篇個人博客 重構定義 名詞 對軟件內部結構的一種調整,目的是在不改變軟件可觀察行為的前提下,提高其可理解性,降低其修改成本。——《重構-改善既有代碼設計》 動詞 使用一系列重構手法,在不改變軟件可觀察行為的前提下,...
摘要:什么是重構列表重構方法需要以一種特定的格式記錄下來。這些重構手法到底有多成熟本書中提到的重構手法第章。做法創造新函數,以用途命名提煉代碼到函數中檢查變量名是否符合規范在源函數中,將被提煉代碼替換為函數引用測試范例重構前重構后 什么是重構列表 重構方法需要以一種特定的格式記錄下來。按照格式記錄下來的重構方法的集合叫重構列表 重構的記錄格式 每個重構手法可分為5個部分: 名稱 構建重構詞匯...
摘要:暴露接口如果是函數,就擴展,否則就是驗證數據使用金額校驗規則這樣運行能正常,也有擴展性性,但是對于代碼潔癖的來說,這樣寫法不優雅。 重構不是對以前代碼的全盤否定,而是利用更好的方式,寫出更好,更有維護性代碼。不斷的追求與學習,才有更多的進步。 1.前言 做前端開發有一段時間了,在這段時間里面,對于自己的要求,不僅僅是項目能完成,功能正常使用這一層面上。還盡力的研究怎么寫出優雅的代碼,性...
閱讀 1000·2021-11-22 13:52
閱讀 1441·2021-11-19 09:40
閱讀 3122·2021-11-16 11:44
閱讀 1263·2021-11-15 11:39
閱讀 3893·2021-10-08 10:04
閱讀 5333·2021-09-22 14:57
閱讀 3096·2021-09-10 10:50
閱讀 3177·2021-08-17 10:13