代碼風格
- 聲明:代碼風格是幫助開發者更加高效的開發以及后期維修更新迭代的基礎,良好的代碼風格可以提升團隊的開發效率,產品不同功能,在清晰簡潔的代碼風格下更加高效的被開發出來。
一,為什么需要管理代碼風格?
- 試着想一下,一個程序員寫一個程序,\(commit\)到團隊的程序管理庫里面,如果團隊中的其他開發者需要這個功能,那么他就會去閱讀這個源碼,正所謂一千個讀者,一千個哈姆雷特。就算是代碼這樣對於計算機來說非常嚴格的語言,而在我們人類看來絕對無法拋開我們固有的邏輯思維,而像計算機一樣去思考,像程序編譯器一樣去理解這段程序,我們可以做到的就是閱讀源碼,梳理出自己的一套邏輯,然后理解這段程序的作用是干什么。
- 簡而言之,代碼風格是一個團隊中必須統一的標准,不統一就會導致不同程序間的接口調用凌亂,團隊成員對於整個程序的框架理解也不會更加清晰。
二,代碼風格細節
- 為了了解如何規定一個好的代碼風格,我們先來了解一下代碼到底由哪些部分組成。
代碼組成部分
- 影響自己的代碼組成部分
- 一, IDE:(集成開發環境),正對於不同的語言,不論是前端還是后端,都有各自的代碼風格,選擇不同的集成式開發環境可以幫助你理解你們所正在開發的項目里面的一些層級結構,比如做Python,web開發的Django框架使用Pycharm是這樣的:
- 左側是項目的文件結構,右側是代碼的展示,不同文件夾采取不同的顏色加以區分,幫助更好的理解以及管理項目。
- 二, 編程字體:正如一個人的字體一樣,不同的字體反映到嚴格的代碼上面,反映自然大不相同,甚至走向相背離的極端,下面舉兩個具體的字體例子:
- Magneto字體
- Cascadia Code PL字體
- 相比於Magneto那更具藝術的字體,可以很清楚的發現Cascadia Code字體對於代碼的展示更具優勢,不同單詞之間,不同字母數字之間區分更加的明顯,方便程序員閱讀以及理解代碼的原始意義,就好像是閱讀一個不僅僅聰明而且謙虛的人寫的作文,字體優美簡潔,同時在這種情況下,項目的共同構建者也更容易發現你的問題,提出意見,一起讓整個程序更加的完善,魯棒性更好
代碼高亮(這一點非常重要)
舉一個非常直觀的例子
這是一張字母圖,需要你去找到所有的
V字符
也許你覺得很簡單,但是相比於下面這種呈現方式,
V一下子就找到了,是不是非常容易,你幾乎不需要動腦筋,聯想到我們人類理解客觀事物的規律,一件事物從越是多的方面去理解,自然理解的也就越深,這一點同樣適用於我們編寫代碼的過程,不同的高亮讓你一下子通過視覺一下子就理解了這個區域到底是什么功能。#include <stdio.h> #include <time.h> void bubbleSort_1(int array[], int length); void print(int array[], int length); void bubbleSort_2(int array[], int length); int main() { clock_t begin = clock(); int array[] = {10, 1, 10, 0, 111, 121, 147, 0, 1, 3, 265, 111, 10, -156, 1315, 0001, 1518, 88, 131}; int length = 19; bubbleSort_1(array, length); print(array, length); clock_t end = clock(); printf("程序總運行時長為:%ldms", end - begin); }#include <stdio.h> #include <time.h> void bubbleSort_1(int array[], int length); void print(int array[], int length); void bubbleSort_2(int array[], int length); int main() { clock_t begin = clock(); int array[] = {10, 1, 10, 0, 111, 121, 147, 0, 1, 3, 265, 111, 10, -156, 1315, 0001, 1518, 88, 131}; int length = 19; bubbleSort_1(array, length); print(array, length); clock_t end = clock(); printf("程序總運行時長為:%ldms", end - begin); }稍微高亮一下就產生了完全不一樣的效果。更何況還可以正對於每一個代碼細節進行高亮
- 影響別人觀感的部分
- 首先先來看一個極端的例子:
- 這是一個網頁的JS,雜亂無章的排列,雖然由關鍵字高亮,雖然有行號,雖然有優秀的變量聲明,但是說實在的正常人都不一定可以讀懂這個代碼的實際意義到底是什么,那么如果規范化之后呢?
- 瞬間就舒暢了,該縮進的縮進,該有的分號出現在該有的位置上,簡潔的命名出現在該出現的地方,誰遇上這樣的代碼不喜歡呢?
- 總結
- 影響自己的
- IDE選擇
- 代碼字體
- 代碼高亮
- 影響別人的:
- 代碼縮進
- 同時影響的:
- 代碼命名
- 代碼注釋
三, 代碼風格選擇:
- 這里着重介紹兩種已經被很多程序開發者所接受的代碼風格
- \(K\&R\)
- $ MicroSoft代碼風格 $
\(K\&R\)
\(K\&R\)是一個歷史相當悠久的代碼風格,最開始就是由於伴隨着C語言聖經Kernighan和Ritchie的《 C Programming Language 》的出版而逐漸被程序開發者們所接受的
具體細節
#include <stdio.h>
int main(int argc, char *argv[]) {
int a = rand() % 100;
if (a > 25) {
call_a_function();
call_another_function();
} else {
call_b_function();
} // end if
} // end main
- 8個字符的TAB鍵,列數限制在80列。
- 這在一定程度上要求程序開發這者必須精簡,否則一不小心就會超出列數限制。
- 左花括號寫在一行的末端,然而右花括號獨立一行。
- 節省空間,整個程序排版緊湊,連續。
- 命名法:
- 以精簡為主:所有變量以小寫字母為主,單詞考慮縮寫, 長單詞考慮使用下划線風格。
int resultchar user_namechar[] user_pwd
\(MicroSoft代碼風格\)
\(Microsoft\)微軟使用一個名為匈牙利編碼規范,他使用在微軟任何產品內,如果你要使用微軟的API,或者你也需要一套類似的編碼規范,那么學習一下總是沒有錯的。
具體細節
共有前綴這是Microsoft特有出現的一種創新。
| 前綴 | 數據類型(基礎類型) |
|---|---|
| c | char(字符) |
| by | BYTE(字節,無符號字符) |
| n | short(短整數和整數,表示一個數) |
| i | int(整數) |
| x,y | short(短整數,通常用於x坐標和y坐標) |
| cx,cy | short(短整數,通常用於表示x和y的長度;c表示計數) |
| b | BOOL(int) |
| w | UINT(無符號整數)和WORD(無符號字) |
| l | LONG(長整型) |
| dw | DWORD(無符號長整型) |
| fn | 函數指針 |
| s | 字符串 |
| sz,str | 以一個字節為0(空值)終止的字符串 |
| lp | 32位長指針 |
| h | 句柄(常用於windows對象) |
變量命名
int *lpiData //32位int指針
char *g_size // 全局變量指針,使用g作為前綴
縮進:
class CVector
{
public:
CVector() {}
.
.
.
private:
int x, y, z;
}
- 左括號與右括號獨占一行











