Coding Style

蔡銘軒 @ Sprout 2021 C/C++語法班

Coding Style?

這是一堂輕鬆的課

Coding Style?

這是一堂教你寫出更好的Code的課

Coding Style?

這是一場宗教戰爭

Naming Convention

為變數與函式取有意義的名字

double func(double a) {
  const double b = 3.14;
  return a * a * b;
}
double get_circle_area(double radius) {
  const double PI = 3.14;
  return radius * radius * PI;
}

Naming Convention

同時遵守一些潛規則

for (int i = 0; i < n; i++) {
  std::cout << "this is ok\n";
}

例:在 for loop 裡使用 i, j, k

Naming Convention

兩大教派

under_score

camelCase

int get_area();
int getArea();
int student_count;
int studentCount;

Naming Convention

只有差異,沒有優劣

Naming Convention

只有差異,沒有優劣

2020/3/28

2021/3/6

裴裴(Wu-Jun):
我現在好像覺得底線比較好

Naming Convention

言歸正傳

根據 Google Coding Style Guide

函式名稱用camelCase

變數名稱用under_score

void demoFunction(int demo_variable) {
  int other_variable;
  /* do something */
  return;
}

Naming Convention

關於camelCase

camelCase還可以分成大/小駝峰

大駝峰: CamelCase

小駝峰: camelCase

根據 Google Coding Style Guide

class 的名稱使用大駝峰

Naming Convention

原則

一致性

整份程式使用相同的命名方式

可讀性

int thisIs_aJoke();

Spacing

善用空白可以大大增加可讀性

double get_area(double radius) {
  const double PI=3.14;
  return radius*radius*PI;
}
double get_area(double radius) {
  const double PI = 3.14;
  return radius * radius * PI;
}

Spacing

indent

for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (i > j)
std::cout << "bigger\n";
for (int i = 0; i < n; i++)
  for (int j = 0; j < m; j++)
    if (i > j)
      std::cout << "bigger\n";

Spacing

indent

用空白代替tab

通常可以在編輯器設定按tab時代表幾個空白

Google: 使用2個空白

個人偏好: 使用4個空白

Spacing

適度放入一些空白的行

double get_circle_area(double radius) {
  const double PI = 3.14;
  return radius * radius * PI;
}

int get_rectangle_area(int height, int width) {
  return height * width;
}

int main() {
  double radius = 1.23;
  double circle_area = get_circle_area(radius);
  
  int height = 3;
  int widht = 4;
  int rectangle_area = get_rectangle_area(height, width);
  
  return 0;
}

Spacing

傳教時間

if (a + b > c) {
  // good
}
if( a + b > c ){
  // not so good
}
if(a+b>c){
  // you wanna fight?
}

Curly Braces

Comments

適度加入註解,增加可讀性

char* get_student_class(char* student_name) {
  // return one of "C++", "Python", "algo"
  // or "none" if student is not in any class
  
  ...
}

善用 // 或是 /* */

保持一致性

Misc

1. 在宣告變數時,宣告在需要這個變數的附近地方

2. 盡量不要使用全域變數

3. 初始化剛宣告的變數

4. 盡量不要 using namespace std;

5. 編輯器使用dark theme (不可靠研究顯示coding速度+37%)

Conclusion

這是一堂最簡單的課

也是一堂最困難的課

沒有新的語法、技術、邏輯、算數....

如何把程式寫的簡單易懂是長期的課題,沒有捷徑

Conclusion

一個會寫程式的人,不只是可以寫出功能,還要寫的漂亮

Sprout 2021 Coding Style

By JT

Sprout 2021 Coding Style

  • 567