程式碼風格
- 宣告:程式碼風格是幫助開發者更加高效的開發以及後期維修更新迭代的基礎,良好的程式碼風格可以提升團隊的開發效率,產品不同功能,在清晰簡潔的程式碼風格下更加高效的被開發出來。
一,為什麼需要管理程式碼風格?
- 試著想一下,一個程式設計師寫一個程式,\(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 result
char user_name
char[] 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;
}
- 左括號與右括號獨佔一行