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