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