代碼規(guī)范需要防微杜漸code?review6個(gè)小錯(cuò)誤糾正
code review
所謂code review,意思很明確,就是代碼回顧,這個(gè)環(huán)節(jié)能幫你發(fā)現(xiàn)一些你代碼中的不好的習(xí)慣,或者一些錯(cuò)誤的行為。這個(gè)工作一般是團(tuán)隊(duì)的老大來(lái)做的,但是
我們的團(tuán)隊(duì)人均大佬
所以我們都是一起code review的,人多力量大,參加的人越多,越能讓你發(fā)現(xiàn)自己的錯(cuò)誤,從而能及時(shí)改正,收益頗豐!?。?/p>
注:下方代碼都是虛構(gòu),主要為了講解代碼錯(cuò)誤習(xí)慣,請(qǐng)勿較勁~
分析一下我的錯(cuò)誤代碼行為
1、寫沒必要的函數(shù)
場(chǎng)景:我需要給某個(gè)html根標(biāo)簽設(shè)置一個(gè)屬性,而這個(gè)行為是需要在項(xiàng)目初始化的時(shí)候去做的,我當(dāng)時(shí)的做法是:
// utils
export const setXXXyyy = () => {
const tag = document.tag;
const xxx = tag.getAttribute('xxx');
if (xxx || xxx === null) {
tag.setAttribute('xxx', 'yyy');
}
};
// app.tsx
import { setXXXyyy } from 'utils'
// 初始化時(shí)
setXXXyyy()
缺陷:可能我有考慮到以后會(huì)在此函數(shù)里去做更多事,但是現(xiàn)階段這么寫確實(shí)有點(diǎn)多余
改正:直接在模板html里把此屬性加到標(biāo)簽上即可
// public/index.html <tag xxx="yyy"></tag>
2、Promise傳遞不明值
場(chǎng)景:我需要請(qǐng)求一個(gè)接口,請(qǐng)求返回一組數(shù)據(jù),我需要把這組數(shù)據(jù)中的某個(gè)參數(shù)通過Promise帶出去
// 請(qǐng)求方法
const request = () => {
return new Promise(async (resolve) => {
const res = await axios(...)
resolve(res)
})
}
// 使用
const res = await request()
console.log(res.data.answer)
缺陷:直接把res傳遞出去了,如果沒有ts的限制,那么下一個(gè)使用request的開發(fā)人員根本不知道這個(gè)res里有什么,也自然就不知道有answer這個(gè)目標(biāo)數(shù)據(jù)了
改正:直接把目標(biāo)數(shù)據(jù)answer傳遞出去
const request = () => {
return new Promise(async (resolve) => {
const res = await axios(...)
// 改正
resolve(res.data.answer)
})
}
const answer = await request()
console.log(answer)
3、使用沒必要try catch
場(chǎng)景:試異步操作1,如果失敗的話試異步操作2,如果失敗進(jìn)行操作3
action1().catch(() => {
try {
await action2()
} catch(e) {
throw e
}
}).catch(() => {
action3()
})
錯(cuò)誤:沒必要使用try catch,await失敗之后,會(huì)自動(dòng)返回一個(gè)失敗的Promise,通過鏈?zhǔn)秸{(diào)用,會(huì)執(zhí)行下一個(gè)catch
改正:去除try catch
action1().catch(() => {
await action2()
}).catch(() => {
action3()
})
4、Promise.all并發(fā)限制
場(chǎng)景:我需要用Promise.all去進(jìn)行并行執(zhí)行一些異步操作,這個(gè)操作是在服務(wù)端的。。
// promises可能會(huì)有幾十個(gè),幾百個(gè),上千個(gè) await Promise.all(promises)
缺陷:眾所周知,服務(wù)端有時(shí)候是很脆弱的,可能你幾十個(gè)并發(fā)就會(huì)把服務(wù)端給折騰的不要不要的了,所以控制并發(fā)是很重要的
改正:既然承受不住,那就控制并發(fā)唄,網(wǎng)上很多控制并發(fā)的方案。這里我就不說哪個(gè)方案比較好了。。自己實(shí)現(xiàn)也行,用庫(kù)也行,看你們團(tuán)隊(duì)需要哪個(gè)吧。。
// 控制并發(fā) await promiseAllLimit(promises)
5、Nodejs中使用過多sync函數(shù)
場(chǎng)景:在后端那邊進(jìn)行文件操作,由于比較喜歡用同步方法,所以用了
const readData = fs.readFileSync(filepath); fs.writeFileSync(targetPath, readData); const workbook = xlsx.readFile(targetPath); fs.unlinkSync(targetPath);
缺陷:Nodejs引以為傲的就是他的大部分方法都支持異步,所以它才能在高并發(fā)的場(chǎng)景中那么牛,所以盡量少用它的同步方法,性能會(huì)好一些
改正:使用它對(duì)應(yīng)的異步方法吧,,不過要嵌套了。。很煩啊
6、判空要放前面
場(chǎng)景:有兩個(gè)參數(shù),我要對(duì)他們進(jìn)行一系列判斷:
- 1、判斷數(shù)據(jù)表里有沒有這兩個(gè)參數(shù)
- 2、判斷這兩個(gè)參數(shù)是否重疊
- 3、判斷這兩個(gè)參數(shù)是否為空
if (usename) {
...
}
if (password) {
...
}
if (!username || !password) {
...
}
缺陷:這個(gè)順序是不對(duì)的,如果兩個(gè)參數(shù)為空,則沒必要進(jìn)行另外兩步
改正:改變順序:
- 1、這兩個(gè)參數(shù)是否為空
- 2、判斷數(shù)據(jù)表里有沒有這兩個(gè)參數(shù)
- 3、判斷這兩個(gè)參數(shù)是否重疊
if (!username || !password) {
...
}
if (usename) {
...
}
if (password) {
...
}以上就是代碼規(guī)范需要防微杜漸code review6個(gè)小錯(cuò)誤糾正的詳細(xì)內(nèi)容,更多關(guān)于代碼規(guī)范code review錯(cuò)誤糾正的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JS運(yùn)動(dòng)基礎(chǔ)框架實(shí)例分析
這篇文章主要介紹了JS運(yùn)動(dòng)基礎(chǔ)框架,實(shí)例分析了javascript定時(shí)器及div樣式的使用技巧,需要的朋友可以參考下2015-03-03
bootstrap+jQuery 實(shí)現(xiàn)下拉菜單中復(fù)選框全選和全不選效果
這篇文章主要給大家介紹了關(guān)于利用bootstrap+jQuery 實(shí)現(xiàn)下拉菜單中復(fù)選框全選和全不選效果的相關(guān)資料,文中給出了完整的示例代碼供大家參考學(xué)習(xí),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來(lái)一起看看吧。2017-06-06
微信小程序?qū)崿F(xiàn)動(dòng)態(tài)改變view標(biāo)簽寬度和高度的方法【附demo源碼下載】
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)動(dòng)態(tài)改變view標(biāo)簽寬度和高度的方法,涉及微信小程序事件響應(yīng)及使用setData針對(duì)data數(shù)據(jù)動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12
JavaScript-html標(biāo)題滾動(dòng)效果的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇JavaScript-html標(biāo)題滾動(dòng)效果的簡(jiǎn)單實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2016-09-09
JavaScript實(shí)現(xiàn)的斑馬線表格效果【隔行變色】
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的斑馬線表格效果,通過javascript針對(duì)table表格的遍歷與運(yùn)算實(shí)現(xiàn)隔行變色功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2017-09-09
學(xué)習(xí)JavaScript設(shè)計(jì)模式(多態(tài))
這篇文章主要帶領(lǐng)大家學(xué)習(xí)JavaScript設(shè)計(jì)模式,其中重點(diǎn)介紹多態(tài),舉例說明多態(tài)的思想,對(duì)多態(tài)進(jìn)行詳細(xì)剖析,感興趣的小伙伴們可以參考一下2015-11-11
用iframe實(shí)現(xiàn)不刷新整個(gè)頁(yè)面上傳圖片的實(shí)例
下面小編就為大家?guī)?lái)一篇用iframe實(shí)現(xiàn)不刷新整個(gè)頁(yè)面上傳圖片的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2016-11-11

