六星教育:程序員的10個編程小技巧,教你寫出高質(zhì)量代碼!

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

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

案例
//錯誤的示范:
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),看著看著就暈了,這時可以將所有循環(huán)提取到單獨(dú)的函數(shù)中。
假設(shè)有一個包含兩層嵌套的數(shù)組,想要拿到最后一個數(shù)組的值?一般情況下開發(fā)者都會使用嵌套循環(huán),但不是最佳的辦法??梢試L試使用函數(shù)的反復(fù)調(diào)用來完成操作執(zhí)行相同操作的,這樣一來代碼重復(fù)性更小,更易于閱讀、重用性高。
// 錯誤示范
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.注釋
注釋是一個老生常談的話題,很多人不重視,為了快速完成項目忽略注釋,導(dǎo)致后期修改和復(fù)用出現(xiàn)很大問題,得不償失。
?

4.避免創(chuàng)建大函數(shù)
當(dāng)一個函數(shù)或一個類需要實現(xiàn)的功能太多時,建議將其分成多個小的函數(shù)。
假設(shè)我們需要加減兩個數(shù)字。我們可以用一個功能做到這一點(diǎn)。但是好的做法是將它們分為兩部分。如果有單獨(dú)的功能,則可以在整個應(yīng)用程序中重復(fù)使用。
// 錯誤示范
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)“深層嵌套”中的例子來舉例。
// 錯誤示范
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),名稱以小寫字母開頭,之后的每一個單詞首字母都用大寫,比如駱駝的大小寫為camelCase?
函數(shù)和變量都必須遵循此規(guī)則。
示例代碼:
let camelCase = ''const thisIsCamelCase = () => {????//so something}
?
7.函數(shù)命名
函數(shù)的命名基本與上述提到的變量命名規(guī)則基本一樣,但需要注意的是,命名盡量注意詳細(xì),比如我們需要一個能夠獲取用戶銀行信息的功能,那么要盡量將命名具體化,如下
錯誤的示范:getUserInfo。
正確的示范:getUserBankInfo

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

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