training and sharing about clean code
TRANSCRIPT
1
為什麼程式碼要易讀 ?
2
3
除了我之外沒有人會看這份程式也許你會說↓
4
5
三元運算子與一行化的愛恨情仇return ( Z > B ) ? True : False ;
if ( Z > B ) { return True ;} else { return False ;}
6
return ( Z > B ) ? True : ( X > Y ) ? True : False ;↓
return ( Z > B ) ? True : ( X > Y ) ? True : False ;
這已經是一種性功能障礙了
7
一行化的暗示‧程式碼越少效率越好‧一行化比較潮‧看不懂的人會叫我大大
8
Naming
9
10
int tmp = 0;for (int x=0; x<24; x++){
for (int y=0; y<60; y++){for (int z=0; z<60; z+
+){tmp++;
}}
}return tmp;
11
int sumSeconds = 0;for (int hour=0; hour<24; hour++){
for (int min=0; min<60; min++){
for (int sec=0; sec<60; sec++){
sumSeconds++;}
}}return sumSeconds;
12
加入額外的輔助資訊Public int createCache(int size);
Public int createCache(int sizeByMB);
Public int createCacheByMB(int size);
13
具體、具體再具體Animal
↓Cat↓
Tiger
14
AnAppleADayKeepTheDoctorAway anAppleADayKeepTheDoctorAway =New AnAppleADayKeepTheDoctorAway(“Apple”);
BestFruit bestFruit = new BestFruit(“Apple”);
15
排版慣例 1( 小 ) 駝峰式命名法setValuegetValuecheckValueisValue
16
排版慣例 2使用 Space 進行縮排if (Z > B){
a = 1; b = 2; c = 3; d = 4 e = 5;}
使用 Tab 進行縮排if (Z > B){
a = 1;b = 2;c = 3;d = 4e = 5;
}
→
17
排版慣例 3永遠都使用大括號將 if 及迴圈語法關起來if ( Z > B)
PK = True;else
PK = False;echo “Shit”;
18
hashOut.data = hashes + SSL_MD5_DIGEST_LEN;hashOut.length = SSL_SHA1_DIGEST_LEN;if ((err = SSLFreeBuffer(&hashCtx)) != 0) goto fail;
if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0) goto fail;if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0) goto fail;if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail;if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail; goto fail;if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail;
19
詞不達意
20
Filter, but filter what ?filterYear(int year)
select/exclude
21
邊界錯誤閉區間 ( 包含 /包含 )
min/maxfirst/last
半開放區間 ( 包含 /不包含 )begin/end
22
布林名稱混亂Boolean readPassword = true;
↓Boolean isNeedPassword = true;
Prefix for Boolean : is / has / can / should
23
程式的使用說明書 -註解
24
/**•投資決策系統•將投資決策獨立拉出的好處是 balabala...**/Public void proccessInvestTask(){
if (Z>B){ // 如果利大於弊就去投資// TODO 老闆說還要加入核決系統invest(); // 去投資// TODO 下次要改名成 printReport();showReport(); // 這段會將報表印出
}}
25
if ( B > Z) {
…}
if ( B < Z) {
…}
if ( Z > B) {
…}
if ( Z < B) {
…}
26
if ( isCheck == true) {
…}
if ( !isCheck == false) {
…}
27
不要看窗外
28
Single Responsibility Principle單一責任原則程式可讀性 UP~UP~UP~
解耦合降低維護成本增加再用性 (Resuable)
29
重構、重構再重構Wiki : 代碼重構( Code refactoring)指對軟體代碼做任何更動以增加可讀性或者簡化結構而不影響輸出結果。
30
迷思:可讀性 vs 效率nameList.contains(“王小明” );
nameSet.contains(“王小明” );
31
人非聖賢寫就對了Just do it!
32
Q & A