六星教育:知道這些編碼小技巧,幫助你提高50%的工作效率

編碼規(guī)范是成為一個(gè)優(yōu)質(zhì)程序員的重要一課,它是編程的樣式的模板。這篇文章六星教育將介紹12中編程規(guī)范及技巧,相信學(xué)習(xí)之后你的代碼一定會(huì)提升一個(gè)檔次。

首先我們要明確,為什么要遵循編碼規(guī)范?遵循這樣的約定有什么好處?
1. 遵循規(guī)范可以寫出干凈簡(jiǎn)潔的代碼
2. 可以代碼的質(zhì)量
3. 提升代碼的可讀性
4. 使代碼維護(hù)更加容易
代碼整潔之道一書的作者羅伯特曾經(jīng)說過:
“干凈的代碼既簡(jiǎn)單又直接。干凈的代碼讀起來像寫得很好的散文。簡(jiǎn)潔的代碼永遠(yuǎn)不會(huì)掩蓋設(shè)計(jì)者的意圖,而是充滿清晰的抽象和直接的控制線?!?-羅伯特·馬?。≧obert C. Martin)
?
1.不要出現(xiàn)莫名其妙的數(shù)字
很多程序員在實(shí)現(xiàn)功能的時(shí)候會(huì)分配一個(gè)沒有明確意義的數(shù)字,用于特定的目的,寫完這個(gè)數(shù)字后沒有即使去做注釋,然后過兩天當(dāng)程序出現(xiàn)問題時(shí),翻看代碼碰到這個(gè)數(shù)字,連自己都忘了它的意義。當(dāng)程序需要固定的數(shù)值參與時(shí),給予特定的名稱。

案例
//錯(cuò)誤的示范:
for(let i = 0; i < 50; i++){
????//do something
}
//正確的示范:
let NUMBER_OF_STUDENTS= 50
for(let i = 0; i < NUMBER_OF_STUDENTS; i++){
????//do something
}
?
2.深度嵌套
有些程序需要使用到無數(shù)次的嵌套循環(huán),看著看著就暈了,這時(shí)可以將所有循環(huán)提取到單獨(dú)的函數(shù)中。
假設(shè)有一個(gè)包含兩層嵌套的數(shù)組,想要拿到最后一個(gè)數(shù)組的值?一般情況下開發(fā)者都會(huì)使用嵌套循環(huán),但不是最佳的辦法??梢試L試使用函數(shù)的反復(fù)調(diào)用來完成操作執(zhí)行相同操作的,這樣一來代碼重復(fù)性更小,更易于閱讀、重用性高。
// 錯(cuò)誤示范
const array = [ [ ['Shoaib Mehedi'] ] ]
array.forEach((firstArr) =>{
????firstArr.forEach((secondArr) => {
????????secondArr.forEach((element) => {
????????????console.log(element);
????????})
????})
})
// 正確示范
const array = [ [ ['Shoaib Mehedi'] ] ]
const getValuesOfNestedArray = (element) => {
????if(Array.isArray(element)){
????????return getValuesOfNestedArray(element[0])
????}
????return element
}
getValuesOfNestedArray(array)
?
3.注釋
注釋是一個(gè)老生常談的話題,很多人不重視,為了快速完成項(xiàng)目忽略注釋,導(dǎo)致后期修改和復(fù)用出現(xiàn)很大問題,得不償失。
?

4.避免創(chuàng)建大函數(shù)
當(dāng)一個(gè)函數(shù)或一個(gè)類需要實(shí)現(xiàn)的功能太多時(shí),建議將其分成多個(gè)小的函數(shù)。
假設(shè)我們需要加減兩個(gè)數(shù)字。我們可以用一個(gè)功能做到這一點(diǎn)。但是好的做法是將它們分為兩部分。如果有單獨(dú)的功能,則可以在整個(gè)應(yīng)用程序中重復(fù)使用。
// 錯(cuò)誤示范
const addSub = (a,b) => {
????// add
????const addition = a+b
????// sub
????const sub = a-b
????// returning as a string
????return `${addition}${sub}`
}
?
//正確示范
// add
const add = (a,b) => {
????return a+b
}
// sub
const sub = (a,b) => {
????return a-b
}
?
5.重復(fù)代碼
重復(fù)代碼也是常見的問題,如遇到此情況,將重復(fù)代碼提取到函數(shù)中。
繼續(xù)用上面的第2點(diǎn)“深層嵌套”中的例子來舉例。
// 錯(cuò)誤示范
const array = [ [ ['Shoaib Mehedi'] ] ]
array.forEach((firstArr) =>{
????firstArr.forEach((secondArr) => {
????????secondArr.forEach((element) => {
????????????console.log(element);
????????})
????})
})
// 正確示范
const array = [ [ ['Shoaib Mehedi'] ] ]
const getValuesOfNestedArray = (element) => {
????if(Array.isArray(element)){
????????return getValuesOfNestedArray(element[0])
????}
????return element
}
getValuesOfNestedArray(array)
?
6.變量命名
變量命名也是有講究的,好的變量命名可以讓代碼更加通俗易懂,一般來說命名遵循以下標(biāo)準(zhǔn),名稱以小寫字母開頭,之后的每一個(gè)單詞首字母都用大寫,比如駱駝的大小寫為camelCase?
函數(shù)和變量都必須遵循此規(guī)則。
示例代碼:
let camelCase = ''const thisIsCamelCase = () => {????//so something}
?
7.函數(shù)命名
函數(shù)的命名基本與上述提到的變量命名規(guī)則基本一樣,但需要注意的是,命名盡量注意詳細(xì),比如我們需要一個(gè)能夠獲取用戶銀行信息的功能,那么要盡量將命名具體化,如下
錯(cuò)誤的示范:getUserInfo。
正確的示范:getUserBankInfo

8.命名時(shí)注意動(dòng)詞的使用
比如我們需要從數(shù)據(jù)庫中獲取用戶信息,函數(shù)的名稱可以是userInfo,user或者fetchUser,但我推薦使用含有動(dòng)詞的命名 getUser。
//正確示范
function getUser(){//do something}
9. 常量值所有都大寫
常量命名都使用全大寫的名稱,并用下劃線分割所有單詞
//正確示范
const DAYS_IN_A_YEAR = 365;
?

10. 避免變量使用字母
在功能性的命名中盡量避免使用單個(gè)字母,不過如果在循環(huán)中,可以忽略這一點(diǎn)
//錯(cuò)誤示范
const q = () => {
????//....
}
//正確示范
const query = () => {
????//....
}//this is also okay
for(let i = 0;i < 10; i++){
????//...
}
?
結(jié)論
從長(zhǎng)遠(yuǎn)來看,遵循代碼編寫規(guī)范,對(duì)開發(fā)者的自身發(fā)展來說是百利而無一害的。每個(gè)項(xiàng)目的生命周期都很長(zhǎng),在很長(zhǎng)的周期中誰也無法確定會(huì)用到之前的哪段代碼,哪個(gè)功能。所以對(duì)現(xiàn)在的每一段代碼負(fù)責(zé),就是對(duì)以后的自己負(fù)責(zé)。加油,程序猿?。?!
以上就是本次分享的全部?jī)?nèi)容,想學(xué)習(xí)更多編程技巧,歡迎持續(xù)關(guān)注六星教育!