語法書 / AA 競程語法書 上冊 / 第一單元 / Token 與排版規則

1.5 Token 與排版規則

「Token」是程式碼中的最小單位——就像英文句子由單詞組成,程式碼由 token 組成。認識 token,能幫助你理解程式碼結構,也能減少排版錯誤。

Token 分為 5 類:

類型 說明 例子
關鍵字 C++ 的特殊詞 intreturnusingnamespace
識別碼 你自己取的名字 asummyFunction
字面常數 直接寫的值(數字或文字) 53.14"Hello"
運算子 計算或比較的符號 +-*/<<>>
特殊符號 程式結構的符號 ;{}(),

(「Token」「關鍵字」「識別碼」「字面常數」「運算子」這些名稱先不用背——知道它們大概指什麼就好,後面會反覆遇到,自然就熟了。)

例子拆解

int a = 5;
  • int — 關鍵字
  • a — 識別碼
  • = — 運算子
  • 5 — 字面常數
  • ; — 特殊符號

排版規則

C++ 對空格、縮排的要求不嚴格,但為了可讀性,我們要遵守基本規則:

規則 ✓ 好的做法 ✗ 不好的做法 為什麼
運算子周圍 int sum = a + b; int sum=a+b; 加空格讓程式更容易讀
逗號後面 int a, b, c; int a,b,c; 逗號後面加空格
括號內 main() main ( ) 括號和前面的名稱不空格

縮排:讓「誰在誰裡面」一眼看出來

排版規則裡最重要的是縮排——就是把某些行的開頭往右推幾個空格再開始寫。回頭看 1.1 的 Hello World:

int main() {
    cout << "Hello World" << endl;
    return 0;
}

main() 後面那對大括號 { } 框住的是「main 要做的事」。注意裡面的 coutreturn 0;,開頭都先空了幾格(這裡是 4 格)才開始寫——這就是縮排。它讓你一眼看出「這兩行是包在 main 裡面的」。1.3 的 A+B 也一樣,int a, b;cin >> a >> b; 這些 main 裡的動作,全都往右縮了一層。

C++ 其實不強迫你縮排(就算每行都頂著最左邊也能編譯成功),但沒縮排的程式很難讀。等之後寫到一層包一層的結構(例如迴圈裡再放迴圈),就全靠縮排才看得出層次。所以從現在開始養成習慣:每進到一層 { } 裡面,就往右縮一層(固定縮 2~4 格)

換行:一行一個指令

C++ 不在意你怎麼換行——把 1.3 的 A+B 全部擠成一行,照樣能編譯、執行:

int a, b; cin >> a >> b; int sum = a + b; cout << sum << endl;

但這樣很難讀,出錯時也不好看出是哪一個指令出問題。養成習慣:一行只寫一個指令,像 1.3 原本那樣一行一個動作,清清楚楚:

int a, b;
cin >> a >> b;
int sum = a + b;
cout << sum << endl;

動手試試看: 拿一個之前寫過的程式,試著加上更多空格和縮排,看看變不變更好讀。