作為一個程序員,肯定希望能寫出一手好代碼,看起來賞心悅目,又易于理解。雖說好的代碼是在一定代碼量的基礎(chǔ)上積累起來的,但在寫代碼之初就應(yīng)該有意識地去遵循一定的規(guī)范。
以下是兩位工程師對于代碼規(guī)范的一些總結(jié),很有代表性,分享給大家。+
代碼不是一次性的,要為未來寫代碼
最近的幾件事情讓我對代碼規(guī)范的重要性有了更深的體會,決定自己做些總結(jié)。
情景一:一個不大的項目,由幾個人共同完成。某日,由于業(yè)務(wù)需求變更,需要改動我這邊的部分邏輯,但當(dāng)時我不在,項目組的成員決定由他們來改,但翻了我的代碼,硬是沒找到該邏輯在哪實現(xiàn)的^_^。后來聽了他們的描述,很傷……
情景二:負(fù)責(zé)一個項目的源代碼流程測試,一期代碼并非模塊化實現(xiàn),6K多的shell腳本即使有注釋,看著那個頭疼,后來在我們提出該問題后,開發(fā)重新進(jìn)行了設(shè)計和規(guī)范,拿到代碼的那一刻頓時感覺清晰多了。
都說代碼是程序員的第二張臉,長時間下來,寫的好的代碼定會受到大家的尊重。遵循一些簡單的規(guī)范,寫干凈一致的代碼!把個性用在寫出最簡單易懂的代碼上面,而不是晦澀冗余無用的代碼,甚至自我簽名!設(shè)計良好的結(jié)構(gòu)和模式,撰寫干凈易懂的代碼,對空間的尊重,對代碼的尊重。這樣能贏得別人的尊重!記住代碼不是一次性的,需要重復(fù)的修改和重構(gòu),為未來寫點代碼!
1,寫干凈整潔的代碼
1.1 代碼格式化,包括多級代碼縮進(jìn)、大括號(比如C系代碼),為了提高代碼的美觀型和易讀性,區(qū)間與區(qū)間之間最好以一行*或-之類的間距;
1.2 合理運用空行??招锌梢杂脕砀糸_相對獨立的代碼塊,有利于閱讀和理解。但是不要使用超過一行的空行,對空間,別太奢侈了;
2,命名規(guī)范命名包括函數(shù)、變量、類(面向?qū)ο笾?、命名空間等;
2.1命名需要遵循由其命名便知道其意義的原則; 變量命名區(qū)分全局變量、導(dǎo)出變量、常量、局部變量,最好區(qū)分類型(如果有的話);
2.2 可采用業(yè)界的一些命名規(guī)范,比如匈牙利命名,但同一個項目必須統(tǒng)一;
3,高效使用注釋
3.1 注釋代碼段,注釋邏輯選擇。上面提到運用空行分割開邏輯相對獨立的代碼,那么請在空行的下一行也寫點下面代碼段要干什么的語句吧。如果有if else等邏輯選擇的時候,麻煩也花幾秒鐘寫上判斷的依據(jù)和結(jié)果好嗎?邏輯難懂且關(guān)鍵,您懂的!
3.2 為不容易理解類變量注釋。類變量特別是私有的類變量沒有人要求注釋,但是為了能夠快速的了解您表示的是什么,還是寫點什么吧!您知道我英文不算好!
3.3 獨立的代碼模塊、文件、函數(shù)需要撰寫注釋以說明其實現(xiàn)意圖、原理、怎么使用等(比如函數(shù)的輸入輸出參數(shù)等),獨立的代碼文件和模塊(比如類)最好寫上作者、日期、聯(lián)系方式、版本號等信息,以便后期做追蹤;
3.4 并不是注釋越多越好,相反,完全模塊化、結(jié)構(gòu)化的程序很多地方注釋完全可以精簡;
4,程序結(jié)構(gòu)化、模塊化
4.1 程序設(shè)計中有很多原則、設(shè)計模式,不同的語言、不同的情景可能會有些差異,但整體需要支持高類聚、低耦合的設(shè)計實現(xiàn)方案;
4.2 養(yǎng)成寫開發(fā)文檔的習(xí)慣。對于每一個頁面設(shè)計(前接頁,后接頁),包括功能說明,頁面設(shè)計,頁面名稱,存放位置等,應(yīng)當(dāng)有相應(yīng)的文檔記載。對于發(fā)生改動的地方,需要保留原來的部分(注釋或備份),并說明備份文件存放的地方,改動時間,修改人;對于程序部分,應(yīng)該有相應(yīng)的設(shè)計流程,改動的時候,也需要設(shè)計改動流程圖,以便以后進(jìn)行對比,和查找問題所在位置,以及問題的嚴(yán)重性分析。
4.3 始終要記住的是你寫出的代碼并不是給你一個人看的,你需要保證你的代碼清晰、一致,別的程序員能夠讀懂,團(tuán)隊里面最好定期有code review環(huán)節(jié)。
5,多讀優(yōu)秀的源代碼、多實踐
5.1 看別人代碼時要汲取好的方法和技巧。
5.2 接觸一項技術(shù)要深入了解和實踐,請問您做過的系統(tǒng)您現(xiàn)在都可以從零開始搭建起來了嗎,我的意思是架構(gòu)搭建哦!(以上部分內(nèi)容摘自https://blog.csdn.net/bullbat/article/details/9265351,作者:bullbat)
代碼寫多了,總結(jié)出適合自己的代碼風(fēng)格
1、類型的宏替換1)要求要求用“#ifndef”判斷是否之前被定義過。2)舉例
#ifndef GUA_U8
typedef unsigned char GUA_U8;
#endif
#ifndef GUA_U16
typedef unsigned short GUA_U16;
#endif
#ifndef GUA_U32
typedef unsigned long GUA_U32;
#endif
2、宏定義1)要求①宏全為大寫的英文字母。 ②宏的名稱應(yīng)能讀出其功能作用。2)舉例
#define GUA_RF_COMMUNICATION_JUDGMENT_FALSE 0
#define GUA_RF_COMMUNICATION_JUDGMENT_TRUE 1
3、變量1)要求①變量名稱前的字母含義要求如下 g:global全局。 a:array數(shù)組。 s:static靜態(tài)。 c:const不變常數(shù)。 n:變量。 p:指針。 ②變量的名稱應(yīng)能讀出其功能作用。2)舉例
GUA_U8 gaGUA_USART1_rx_buf[GUA_USART1_RX_SIZE] = {0};//全局?jǐn)?shù)組
GUA_U8 gnGUA_USART1_rx_buf = 0;//全局變量
GUA_U8 nGUA_USART1_rx_buf = 0;//局部變量
static GUA_U8 snGUA_USART1_rx_buf = 0;//靜態(tài)變量
const static GUA_U8 csnGUA_USART1_rx_buf = 0;//const類型的靜態(tài)變量
GUA_U8 *gpGUA_USART1_rx_buf; //全局指針
3、if1)要求①“{”與“}”要對齊。 ②if與else的上方要注釋。2)舉例
//如果計數(shù)值大于10,則返回true
if(nGUA_Num > 10)
{
return true;
}
//如果計數(shù)值小于10,則返回false
else
{
return false;
}
4、switch1)要求①switch、case、default上都要注釋。 ②每種情況的具體處理由“{}”包含。2)舉例
//如果為0則關(guān)燈
switch(nbGUA_Char6[3])
{
//關(guān)燈
case 0x00:
{
P1_1 = 0; //拉低P11
P1SEL &= ~(1 << 1); //設(shè)置P11為IO口
P1DIR |= (1 << 1); //設(shè)置P11為輸出
break;
}
//開燈
case 0x01:
{
P1_1 = 1; //拉高P11
P1SEL &= ~(1 << 1); //設(shè)置P11為IO口
P1DIR |= (1 << 1); //設(shè)置P11為輸出
break;
}
//其它
default:break;
}
5、文件及函數(shù)注釋1)文件注釋要求至少要包含文件名稱、文件作用說明、編碼人、最后修改時間。2)函數(shù)注釋要求至少要包含函數(shù)名稱、函數(shù)作用說明、形參含義、返回值含義、編碼人、最后修改時間。
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62622 -
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68616
原文標(biāo)題:如何寫出好代碼?附資深碼農(nóng)的個人代碼規(guī)范
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論