最近在看一些關於程式可讀性的文章,這裏面遇到一些我也常犯的錯誤,所以紀錄一下
畢竟寫過才會記得,這邊也給自己下個 flag...

1. 如果回傳的東西不要使用,前面可以加入 _=
程式範例:
static User ChangeUserLevel(string userId)
{
//..
}
_ = ChangeUserLevel(userId);
雖然回傳的 User 我沒有要用,但是前面依然加上 _= ,這樣 review 起來,感覺就不會像是你忘記處理
2. 如果 function 設計有一些重複的 true/ false 或是 string 呼叫時可以加入 paramater name.
static User ChangeUserLevel(User user,bool isAutoSave) {
//..
}
//多加入提示詞 isAutoSave 取代使用 ChangeUserLevel("userid",true);
ChangeUserLevel("userid", isAutoSave: true);
3. 不要過於炫技,可以適當拆解 LINQ ,方便如果中間要改變,可以方便插入
var result = users.Where(x => x.Age >18).Select(x => x.Name).Distinct().ToList();
var aldultUser = users.Where(x => x.Age>=18);
var allAldultUserName = aldultUser.Select(x => x.Name);
var result = allAldultUserName.Distinct().ToList();
4. 暫時使用的變數,名稱也不要少打太多字,這都可以幫助之後的閱讀性,不然 code review 很痛苦
//var r = GetUser(u);
var userToDelete = GetUser(userId);
5. 判斷條件如果能拆開就拆開,這樣絕對方便幫助 debug ,我常常判斷日期的時候會用錯 and , or
這樣拆開會比較方便自己 debug 當條件複雜的時候
if (!string.IsNullOrEmpty(name) && (role == "Admin" || level > 3) && !isLocked)
{
//..
}
var hasName = !string.IsNullOrEmpty(name);
var isPrivileged = role == "Admin" || level > 3;
if (hasName && isPrivileged && !isLocked)
{
//..
}
6. 一些常數值記得抽成變數,不然程式碼一長一定會忘記這數字,而且之後要改可能要改很多地方
const int PassingThres = 87;
if (score > PassingThres)
{
}
目前就是想到這麼多,畢竟寫程式久了很容易偷懶