Submit Search
Upload
training and sharing about clean code
•
Download as PPT, PDF
•
0 likes
•
451 views
Chonpin HSU
Follow
training and sharing about clean code
Read less
Read more
Internet
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 32
Download now
Recommended
從技術面簡介線上遊戲外掛
從技術面簡介線上遊戲外掛
John L Chen
PHPUnit Myth
PHPUnit Myth
jameslabs
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
hoopchina
从问题开始,谈前端架构
从问题开始,谈前端架构
裕波 周
密碼學漏洞與他們的產地 Crypto fail and where to find them
密碼學漏洞與他們的產地 Crypto fail and where to find them
John L Chen
Python 3-條件判斷
Python 3-條件判斷
阿Samn的物理課本
.Net 技術研討(linq與架構開發)
.Net 技術研討(linq與架構開發)
Gelis Wu
神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)
yiditushe
Recommended
從技術面簡介線上遊戲外掛
從技術面簡介線上遊戲外掛
John L Chen
PHPUnit Myth
PHPUnit Myth
jameslabs
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
hoopchina
从问题开始,谈前端架构
从问题开始,谈前端架构
裕波 周
密碼學漏洞與他們的產地 Crypto fail and where to find them
密碼學漏洞與他們的產地 Crypto fail and where to find them
John L Chen
Python 3-條件判斷
Python 3-條件判斷
阿Samn的物理課本
.Net 技術研討(linq與架構開發)
.Net 技術研討(linq與架構開發)
Gelis Wu
神州泰岳测试试题(笔试)
神州泰岳测试试题(笔试)
yiditushe
Maintainable Javascript
Maintainable Javascript
Haixu (Hector) Guo
人机对弈编程概述
人机对弈编程概述
勇浩 赖
HTML5移动WEB应用程序开发(PhoneGap)
HTML5移动WEB应用程序开发(PhoneGap)
amd6400
HTML5移动应用开发分享会(PhoneGap)
HTML5移动应用开发分享会(PhoneGap)
amd6400
C语言学习100例实例程序
C语言学习100例实例程序
yiditushe
Swift Functional Programming
Swift Functional Programming
林藍 東
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)
amd6400
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)
amd6400
Arduino程式快速入門
Arduino程式快速入門
吳錫修 (ShyiShiou Wu)
Ch10 習題
Ch10 習題
hungchiayang1
关于Js的跨域操作
关于Js的跨域操作
王 承石
Maintainable PHP Source Code
Maintainable PHP Source Code
Bo-Yi Wu
2009 CSBB LAB 新生訓練
2009 CSBB LAB 新生訓練
Abner Huang
Fp
Fp
fangjiafu
C程式-函式與巨集
C程式-函式與巨集
艾鍗科技
Hello Javascript
Hello Javascript
Baidu, Inc.
Ch2 教學
Ch2 教學
hungchiayang1
密码学 & DRM & sgx
密码学 & DRM & sgx
pluschen
Ruby程式語言入門導覽
Ruby程式語言入門導覽
Mu-Fan Teng
Node.js开发体验
Node.js开发体验
QLeelulu
reading group 成為卓越程式設計師的38項必修法則(20~23)
reading group 成為卓越程式設計師的38項必修法則(20~23)
Chonpin HSU
滑鼠設計輕鬆聊
滑鼠設計輕鬆聊
Chonpin HSU
More Related Content
Similar to training and sharing about clean code
Maintainable Javascript
Maintainable Javascript
Haixu (Hector) Guo
人机对弈编程概述
人机对弈编程概述
勇浩 赖
HTML5移动WEB应用程序开发(PhoneGap)
HTML5移动WEB应用程序开发(PhoneGap)
amd6400
HTML5移动应用开发分享会(PhoneGap)
HTML5移动应用开发分享会(PhoneGap)
amd6400
C语言学习100例实例程序
C语言学习100例实例程序
yiditushe
Swift Functional Programming
Swift Functional Programming
林藍 東
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)
amd6400
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)
amd6400
Arduino程式快速入門
Arduino程式快速入門
吳錫修 (ShyiShiou Wu)
Ch10 習題
Ch10 習題
hungchiayang1
关于Js的跨域操作
关于Js的跨域操作
王 承石
Maintainable PHP Source Code
Maintainable PHP Source Code
Bo-Yi Wu
2009 CSBB LAB 新生訓練
2009 CSBB LAB 新生訓練
Abner Huang
Fp
Fp
fangjiafu
C程式-函式與巨集
C程式-函式與巨集
艾鍗科技
Hello Javascript
Hello Javascript
Baidu, Inc.
Ch2 教學
Ch2 教學
hungchiayang1
密码学 & DRM & sgx
密码学 & DRM & sgx
pluschen
Ruby程式語言入門導覽
Ruby程式語言入門導覽
Mu-Fan Teng
Node.js开发体验
Node.js开发体验
QLeelulu
Similar to training and sharing about clean code
(20)
Maintainable Javascript
Maintainable Javascript
人机对弈编程概述
人机对弈编程概述
HTML5移动WEB应用程序开发(PhoneGap)
HTML5移动WEB应用程序开发(PhoneGap)
HTML5移动应用开发分享会(PhoneGap)
HTML5移动应用开发分享会(PhoneGap)
C语言学习100例实例程序
C语言学习100例实例程序
Swift Functional Programming
Swift Functional Programming
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)
Html5移动web应用开发(PhoneGap)
Arduino程式快速入門
Arduino程式快速入門
Ch10 習題
Ch10 習題
关于Js的跨域操作
关于Js的跨域操作
Maintainable PHP Source Code
Maintainable PHP Source Code
2009 CSBB LAB 新生訓練
2009 CSBB LAB 新生訓練
Fp
Fp
C程式-函式與巨集
C程式-函式與巨集
Hello Javascript
Hello Javascript
Ch2 教學
Ch2 教學
密码学 & DRM & sgx
密码学 & DRM & sgx
Ruby程式語言入門導覽
Ruby程式語言入門導覽
Node.js开发体验
Node.js开发体验
More from Chonpin HSU
reading group 成為卓越程式設計師的38項必修法則(20~23)
reading group 成為卓越程式設計師的38項必修法則(20~23)
Chonpin HSU
滑鼠設計輕鬆聊
滑鼠設計輕鬆聊
Chonpin HSU
cfm to php training
cfm to php training
Chonpin HSU
algorithm research and sharing
algorithm research and sharing
Chonpin HSU
TopDB data transfer
TopDB data transfer
Chonpin HSU
Buy the way web project report
Buy the way web project report
Chonpin HSU
More from Chonpin HSU
(6)
reading group 成為卓越程式設計師的38項必修法則(20~23)
reading group 成為卓越程式設計師的38項必修法則(20~23)
滑鼠設計輕鬆聊
滑鼠設計輕鬆聊
cfm to php training
cfm to php training
algorithm research and sharing
algorithm research and sharing
TopDB data transfer
TopDB data transfer
Buy the way web project report
Buy the way web project report
training and sharing about clean code
1.
1 為什麼程式碼要易讀 ?
2.
2
3.
3 除了我之外 沒有人會看這 程式份 也許 會你
說 ↓
4.
4
5.
5 三元運算子與一行化的愛恨情仇 return ( Z
> B ) ? True : False ; if ( Z > B ) { return True ; } else { return False ; }
6.
6 return ( Z
> B ) ? True : ( X > Y ) ? True : False ; ↓ return ( Z > B ) ? True : ( X > Y ) ? True : False ; 這已經是一種性功能障礙了
7.
7 一行化的暗示 ‧ 程式碼越少效率越好 ‧ 一行化比較潮 ‧
看不 的人會叫我大大懂
8.
8 Naming
9.
9
10.
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.
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.
12 加入額外的輔助資訊 Public int createCache(int
size); Public int createCache(int sizeByMB); Public int createCacheByMB(int size);
13.
13 具體、具體再具體 Animal ↓ Cat ↓ Tiger
14.
14 AnAppleADayKeepTheDoctorAway anAppleADayKeepTheDoctorAway = New AnAppleADayKeepTheDoctorAway(“Apple”); BestFruit
bestFruit = new BestFruit(“Apple”);
15.
15 排版慣例 1 ( 小
) 駝峰式命名法 setValue getValue checkValue isValue
16.
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 = 4 e = 5; } →
17.
17 排版慣例 3 永遠都使用大括號將 if
及迴圈語法關起來 if ( Z > B) PK = True; else PK = False; echo “Shit”;
18.
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.
19 詞不達意
20.
20 Filter, but filter
what ? filterYear(int year) select/exclude
21.
21 邊界錯誤 閉區間 ( 包含
/ 包含 ) min/max first/last 半開放區間 ( 包含 / 不包含 ) begin/end
22.
22 布林名稱混亂 Boolean readPassword =
true; ↓ Boolean isNeedPassword = true; Prefix for Boolean : is / has / can / should
23.
23 程式的使用 明書說 -
註解
24.
24 /** •投資決策系統 •將投資決策獨立拉出的好處是 balabala... **/ Public void
proccessInvestTask(){ if (Z>B){ // 如果利大於弊就去投資 // TODO 老 還要加入核決系統闆說 invest(); // 去投資 // TODO 下次要改名成 printReport(); showReport(); // 這段會將報表印出 } }
25.
25 if ( B
> Z) { … } if ( B < Z) { … } if ( Z > B) { … } if ( Z < B) { … }
26.
26 if ( isCheck
== true) { … } if ( !isCheck == false) { … }
27.
27 不要 看窗外
28.
28 Single Responsibility Principle 單一責任原則 程式可讀性
UP~UP~UP~ 解 合耦 降低維護成本 加再用性增 (Resuable)
29.
29 重構、重構再重構 Wiki : 代碼重構(
Code refactoring ) 指對軟體代碼做任何更動 以 加可讀性增 或者簡化結構 而不影響輸出結果。
30.
30 迷思:可讀性 vs 效率 nameList.contains(“
王小明” ); nameSet.contains(“ 王小明” );
31.
31 人非聖賢 寫就對了 Just do it!
32.
32 Q & A
Editor's Notes
可以執行、效率好不就好了嗎?
天下武功,無堅不破,唯快不破 Q : 什麼快 A : 不是寫的快而是讀的快
先承認你就是三個月後的那個『沒有人』 所以這就是為什麼要讓程式碼易讀的原因
如何達成人人有功練的理論基礎: 程式碼易於閱讀 學習的成本降低 能看更多的程式碼(誤~) 大喊『有功夫,無懦夫』三次並拿出捐款箱
簡單PK一下大家的喜好 不用特別講一行化(後面會講)
是閱讀性功能障礙 縮短理解程式碼的時間比減少程式碼行數還重要
一行化的隱憂 容易漏看 閱讀不易 容易因順序錯誤增加Debug成本
為你心愛的事物取名字 Ex : 汽機車, 竉物
IT WORLD : Arg! The 9 hardest things programmers have to do 命名是痛苦的 將近有一半的程式設計師有命名障礙症候群
計算一天有幾秒的Method
將變數賦與有意義的單字後變的更易閱讀 且更能表達開發者的原意
增加一些額外資訊防止誤會產生 案例方享 Timestamp 的seconds 和 millSeconds的誤用
命名應具體具體再具體 情境題: 逛街時看到路旁有個紙箱上面寫著….
雖然IDE有支援自動補齊 但還是應避免過長的變數名稱以防止閱讀障礙 變數長度適當就好 儘量保持在3個單字內
變數使用駝峰式命名法 大駝峰式命名法又稱Pascal命名法,差異是首字就是大寫
縮排很重要 使用Tab進行縮排,否則會慘不忍賭
上述程式碼原作者想表達的是?? 不閉合很容易造成錯誤 造成別人閱讀上的不便 錯誤發生後Debug不易 需要更細心的追蹤程式碼
2014年6月Apple的iOS 7.0.6系統就是因為沒閉合if判斷式而造成重大的資安漏洞SSL協定形同虛設
以下介紹一些辭不達意形的範例
Filter大家都知道是想表達篩選 面對一個filterYear Method時,到底代表的意思是什麼?
邊界極值的通用設計 begin/end在C++裡表半開放區間
needPassword到底表示了什麼 需要讀取密碼但未讀取? 2. 密碼已經讀取? 以上容易造成布林混亂
註解很重要 怎麼樣寫個好註解是很重要的課題
鼓勵加入任何想法的評註 有缺陷或待補的可使用TODO、FIXME或XXX標記來輔助 綠色註解為雞肋註解(一眼就可看出) 改名的註解不應該存在,因為應該要立刻修正
在判斷式的世界中,慣用很重要 理解時間很可能是1秒和10秒轉換成本(10倍的差距)
If 判斷式的通用法則 優先處理肯定而不是否定 優先處理簡單易理解 優先處理有趣/明顯/重要的情況
看有幾個人看窗外? 人們會直覺的連結”看窗外”這個詞 不要會被看窗外掩蓋
遵循物件導向設計的單一責任原則 讓一個類別或一個函式只負責一件事也可以有效的提高程式易讀性 更棒的是又能同時擁有解耦和降低維護成本及增加可用性的好處
隨時檢視並重構減化你的程式碼(註解也算) 儘量維持程式的小而美 移除經確認後不再使用的程式碼,保持專案的清潔(有待商確,因人而異)
有時會為了可讀性犧牲程式效率 亦或有時效率高的方式可讀性低 比較極端的例子 : 低階語言效率高可讀性低 高階語言效率低可讀性高 那倒底該採用那種語言 – by case決定 List.contains -&gt; O(n) Set.contains -&gt; O(1)
羅馬也不是一天就造成的 習慣可慢慢培養 設計好就先做 可讀性可利用重構慢慢調整 調整久後就成習慣了
Download now