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