像寫(xiě)詩(shī)一樣寫(xiě)代碼:扁平化管理你的代碼
引言
大家好,我是有清
《史記》有云:大樂(lè)必易,大禮必簡(jiǎn),寫(xiě)給機(jī)器看的代碼簡(jiǎn)單,但是寫(xiě)給人看的代碼就需要一點(diǎn)心思
在我們平常的開(kāi)發(fā)過(guò)程中,如果遇到代碼嵌套過(guò)深的函數(shù),那么我們會(huì)
什么叫嵌套過(guò)深呢
我們可以簡(jiǎn)單看一段發(fā)工資的例子
我們將函數(shù)內(nèi)部一個(gè)左花括號(hào)視為一個(gè)嵌套深度,那么我們這個(gè)函數(shù)具有足足 5 層深度,正常情況下超過(guò) 3 層深度,這段代碼便會(huì)散發(fā)出臭的味道,當(dāng)然這不是業(yè)界定義,只要你覺(jué)得這一段代碼不好理解,那么這一段代碼就存在可以?xún)?yōu)化的空間
扁平化
那如何減少我們這個(gè)嵌套深度呢?扁平化管理我們代碼呢
通常情況下,我們具有兩種手段,第一種是提煉,將一段代碼提煉到一個(gè)獨(dú)立的函數(shù);第二種是反轉(zhuǎn),盡快將結(jié)果返回給函數(shù)。
接下來(lái),我們開(kāi)始使用這兩種手段,去重構(gòu)一下我們的代碼。
提煉
我們什么時(shí)候可以提煉函數(shù)呢?
就是當(dāng)我們 「需要花一段時(shí)間去理解這一段代碼是用來(lái)干什么的時(shí)候我們就可以將這一段代碼去提煉為函數(shù)」
舉個(gè)簡(jiǎn)單一點(diǎn)的??
有時(shí)候我們需要檢查response 是否正確,正確的話,我們才會(huì)進(jìn)行一系列對(duì)應(yīng)的邏輯處理
通常情況下,我們要去閱讀主要邏輯之前,我們需要去看一下if這到底是什么情況才會(huì)走入我們的邏輯,但其實(shí)這邊都是一些常規(guī)的校驗(yàn),我們大多數(shù)的時(shí)候根本不關(guān)心這個(gè)校驗(yàn)的具體邏輯,因?yàn)樗怯脕?lái)預(yù)防我們的代碼出現(xiàn)異常的取值報(bào)錯(cuò)
那么,我認(rèn)為這種的 if 就可以提煉出來(lái)一個(gè)函數(shù)
讀者只需要關(guān)心,這個(gè) response 是 sucess 即可,不需要具體關(guān)心我是怎么 check 這個(gè) response,因?yàn)樗鄬?duì)主邏輯來(lái)說(shuō)不是那么的重要
當(dāng)然還有一種情況,在代碼邏輯中區(qū)分紅花和綠葉,這也是阿里開(kāi)發(fā)手冊(cè)中推薦的我們的一點(diǎn),單個(gè)方法的總行數(shù)不要超過(guò) 80 行,代碼邏輯分清紅花和綠葉,個(gè)性和共性,綠葉邏輯單獨(dú)出來(lái)成為額外方法,使主干代碼更加清晰;共性邏輯抽取成為共性方法,便于復(fù)用和維護(hù)
好,接下來(lái)我們優(yōu)化一下引言中的代碼
優(yōu)化之后,主干邏輯就清晰了,我們想要知道每個(gè)情況下的工資是如何發(fā)放的,只需要點(diǎn)進(jìn)去具體的函數(shù)查看即可
但是這么多的 if 嵌套,看的還是很不舒服,我們繼續(xù)下一個(gè)動(dòng)作
反轉(zhuǎn)
通常情況下,我們的if、else 就是用來(lái)區(qū)分在不同的情況下,代碼是走向陽(yáng)光道還是獨(dú)木橋,陽(yáng)光道就是可以理解為都是我們重要的邏輯,讀者都需要看
獨(dú)木橋你可以理解為異常情況,需要立刻從函數(shù)中返回回去,我們通常稱(chēng)這樣的語(yǔ)句為衛(wèi)語(yǔ)句,基于我們防御性編程的思想下,盡快的檢查返回該函數(shù)結(jié)果
同樣阿里規(guī)范也給我們提到了這一點(diǎn)
那么我們根據(jù)這個(gè)思想再進(jìn)一步優(yōu)化一下我們引言的代碼
最后再對(duì)比一下重構(gòu)前后的代碼
總結(jié)
在本文中我們接觸到了,可以借助提煉以及反轉(zhuǎn)去優(yōu)化我們的代碼嵌套,其實(shí)你可以看看當(dāng)前你的項(xiàng)目中的代碼是否存在這樣的情況,可以考慮是否優(yōu)化一波,當(dāng)然優(yōu)化的時(shí)候切記回歸測(cè)試的重要性
借用熊節(jié)的一句話:據(jù)說(shuō)古時(shí)高僧有云 “時(shí)時(shí)勤拂拭,勿使惹塵埃”,代碼當(dāng)如是,專(zhuān)業(yè)人士的技藝應(yīng)當(dāng)如是
希望大家都能像寫(xiě)詩(shī)一樣的寫(xiě)代碼
寫(xiě)在最后
在朋友的安利下,上周去了西溪濕地尋梅
順著路標(biāo)的最佳賞梅點(diǎn),我們一路往前走,但其實(shí)花還是沒(méi)有那么的密集,我們可疑惑,是梅花還沒(méi)開(kāi),還是已經(jīng)謝了
直到,我們看見(jiàn)有個(gè)游人,在拍照的時(shí)候不斷的搖那個(gè)梅花樹(shù)想讓自己更為出片,我才悟了,原來(lái)不密集的梅花,不是樹(shù)的不挽留,而是愛(ài)美的人的追求