摘要:提高代碼可讀性掌握這些就夠了今天看到一篇關(guān)于代碼優(yōu)化的文章寫得十分實(shí)用在學(xué)習(xí)總結(jié)后梳理出思維結(jié)構(gòu)圖將收貨的分享一下原作者方應(yīng)杭原文地址注意這篇文章所指的代碼優(yōu)化特指的是代碼可讀性方面的一些寫法優(yōu)化而不是指的性能優(yōu)化。
提高代碼可讀性,掌握這些就夠了
今天看到一篇關(guān)于代碼優(yōu)化的文章,寫得十分實(shí)用,在學(xué)習(xí)總結(jié)后,梳理出思維結(jié)構(gòu)圖,將收貨的分享一下
原作者:方應(yīng)杭
原文地址:https://zhuanlan.zhihu.com/p/...
注意:這篇文章所指的代碼優(yōu)化,特指的是代碼可讀性方面的一些寫法優(yōu)化,而不是指的性能優(yōu)化。
下面是我總結(jié)的一份思維導(dǎo)圖,方便形成對(duì)文章內(nèi)容結(jié)構(gòu)的一個(gè)大致的印象。
首先是關(guān)于代碼優(yōu)化的幾條原則:
易讀性優(yōu)先
如果不是性能瓶頸問(wèn)題,不要只是為了性能優(yōu)化而改寫代碼
沒(méi)有銀彈。無(wú)論怎么寫,代碼的復(fù)雜性不會(huì)消失。
關(guān)于第三條,作者也解釋了,如果你這個(gè)功能邏輯一句話能說(shuō)清,那你肯定不應(yīng)該寫上百行那么復(fù)雜,如果10分鐘也講不清楚的功能,代碼也一定會(huì)體現(xiàn)出功能的復(fù)雜。
一、如何命名代碼這里講的是程序員的三大難題之一,變量命名。
包括兩大點(diǎn):
要注意詞性,包括6小點(diǎn)。
注意一致性(風(fēng)格統(tǒng)一),包括4小點(diǎn)。
1.注意詞性(1) 普通變量的命名,一般就用「名詞」
name: "lvziwei", age : "18"
(2) 布爾類型變量的命名,用「isX」或者「hasX」或者「canX」
isVip: true 表示是VIP hasValue: true 表示有值 canSpeak: true 表示可以說(shuō)話
(3) 函數(shù)是一個(gè)動(dòng)作,當(dāng)然用「動(dòng)詞」
run(){}, // 不及物動(dòng)詞 drinkWater(){}, // 及物動(dòng)詞
(4) 函數(shù)中,如果是回調(diào)函數(shù)。用「介詞」開頭,或用「動(dòng)詞的現(xiàn)在完成時(shí)態(tài)」
「介詞」開頭
beforeUpdate() afterUpdate()
「動(dòng)詞的現(xiàn)在完成時(shí)態(tài)」, 典型的是Vue的生命周期鉤子函數(shù)。
var component = { beforeCreate(){}, created(){}, beforeMount(){}, mounted(){}, beforeUpdate(){}, updated(){}, activated(){}, deactivated(){}, beforeDestroy(){}, destroyed(){}, errorCaptured(){} }
這兩種寫法都很容易讀,但是注意你最好只選擇一種風(fēng)格寫法并保持,這也是下面將要提到的一致性。
(5) 特別的 : 一些容易混淆的變量,可以添加前綴來(lái)讓他們更容易讀
var dom1 = document.querySelector("#dom1") var dom2 = $("#dom2") // 這樣的代碼不容易讀,因?yàn)閐om1 dom2直覺(jué)上感覺(jué)是一類的,但是一個(gè)是dom對(duì)象,一個(gè)是JQ對(duì)象 // 前綴優(yōu)化: 可通過(guò)變量名稱,一眼看出他們一個(gè)是DOM,一個(gè)是JQ對(duì)象 var dom = document.querySelector("#dom1") var $dom = $("#dom2")
(6) 特別的 : 屬性訪問(wèn)器函數(shù),可以用名詞
這是一種約定成俗的命名方式吧,按說(shuō)函數(shù)都用動(dòng)詞,但是你看到一個(gè)框架里的函數(shù)API是用的名詞,那么這很可能按時(shí)這個(gè)函數(shù)是一個(gè)屬性訪問(wèn)器。
JQ中的text() $dom.text() $dom.text("內(nèi)容1")2.注意一致性(風(fēng)格統(tǒng)一)
(1) 風(fēng)格一致
上面提到過(guò),下面2種風(fēng)格,最好只選擇其一。
beforeUpdate() afterUpdate()
beforeUpdate(){}, updated(){},
(2) 函數(shù)名和函數(shù)體一致
函數(shù)名稱正確的描述函數(shù)體內(nèi)容,函數(shù)內(nèi)容要體現(xiàn)函數(shù)名稱
(3) 時(shí)間一致
隨著時(shí)間推移,業(yè)務(wù)的改變可能導(dǎo)致當(dāng)初的變量名稱已經(jīng)不再合適,這時(shí)候要及時(shí)修改,這也是最難做到的,因?yàn)闋恳话l(fā)而動(dòng)全身。
二、如何組織代碼好了,現(xiàn)在我們的變量名稱已經(jīng)易讀,容易理解了,之后干嘛?
是不是就剩下將你的變量組織起來(lái)了? 下面主要從兩方面講了如何組織代碼
1.用函數(shù)組織你的代碼步驟:
將一坨代碼放到一個(gè)函數(shù)里
將代碼依賴的外部變量作為參數(shù)
將代碼的輸出作為函數(shù)的返回值
給函數(shù)取一個(gè)合適的名字
調(diào)用這個(gè)函數(shù)并傳入?yún)?shù)
這個(gè)函數(shù)里的代碼如果超過(guò) 5 行,則依然有優(yōu)化的空間,請(qǐng)回到第 1 步
2.用對(duì)象組織你的代碼我們會(huì)用 this 來(lái)串聯(lián)這個(gè)對(duì)象和所有函數(shù)。
最終代碼:http://js.jirengu.com/mimazab...
表驅(qū)動(dòng)編程(《代碼大全》里說(shuō)的)
所有一一對(duì)應(yīng)的關(guān)系都可以用表來(lái)做
自說(shuō)明代碼(以 API 參數(shù)為例)
把別人關(guān)心的東西放在顯眼的位置
角度清奇,原作者推薦了一篇教人如何寫出不可維護(hù)的代碼的文章 : https://coolshell.cn/articles...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92690.html
摘要:在對(duì)象的構(gòu)造函數(shù)中,將一個(gè)函數(shù)作為第一個(gè)參數(shù)。二對(duì)象中的方法,可以接收構(gòu)造函數(shù)中處理的狀態(tài)變化,并分別對(duì)應(yīng)執(zhí)行。 showImg(https://segmentfault.com/img/remote/1460000008932857); Promise的重要性我認(rèn)為我沒(méi)有必要多講,概括起來(lái)說(shuō)就是必須得掌握,而且還要掌握透徹。這篇文章的開頭,主要跟大家分析一下,為什么會(huì)有Promise...
摘要:實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)這本書是目前點(diǎn)評(píng)推薦比較多的書,其特色是案例小,好實(shí)踐代碼有場(chǎng)景,實(shí)用。想要學(xué)習(xí)多線程的朋友,這本書是我大力推薦的,我的個(gè)人博客里面二十多篇的多線程博文都是基于此書,并且在這本書的基礎(chǔ)上進(jìn)行提煉和總結(jié)而寫出來(lái)的。 學(xué)習(xí)的最好途徑就是看書,這是我自己學(xué)習(xí)并且小有了一定的積累之后的第一體會(huì)。個(gè)人認(rèn)為看書有兩點(diǎn)好處:showImg(/img/bVr5S5); 1.能出版出...
摘要:你是否已經(jīng)初步掌握了和,但完全不知道從何入手如果是,那么這篇文章一定會(huì)對(duì)你有所幫助,這里總結(jié)了條建議,幫助初學(xué)者總結(jié)學(xué)習(xí)方法,提高學(xué)習(xí)效率。這樣的結(jié)果就是,個(gè)小時(shí)最多只利用了個(gè)小時(shí)。 你是否已經(jīng)初步掌握了html和css,但完全不知道從何入手JavaScript?如果是,那么這篇文章一定會(huì)對(duì)你有所幫助,這里總結(jié)了5條建議,幫助JavaScript初學(xué)者總結(jié)學(xué)習(xí)方法,提高學(xué)習(xí)效率。 一、...
摘要:所以查閱官方文檔以及他人造好的輪子,總結(jié)了一些面試和學(xué)習(xí)中你必須掌握的問(wèn)題。在微博應(yīng)用中,可以將一個(gè)用戶所有的關(guān)注人存在一個(gè)集合中,將其所有粉絲存在一個(gè)集合。 昨天寫了一篇自己搭建redis集群并在自己項(xiàng)目中使用的文章,今天早上看別人寫的面經(jīng)發(fā)現(xiàn)redis在面試中還是比較常問(wèn)的(筆主主Java方向)。所以查閱官方文檔以及他人造好的輪子,總結(jié)了一些redis面試和學(xué)習(xí)中你必須掌握的問(wèn)題。...
閱讀 1321·2023-04-25 19:10
閱讀 1175·2021-09-10 10:50
閱讀 3058·2021-09-02 15:21
閱讀 1417·2019-08-30 15:52
閱讀 1712·2019-08-30 13:56
閱讀 2119·2019-08-30 12:53
閱讀 1908·2019-08-28 18:22
閱讀 2155·2019-08-26 13:47