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