最近重新在讀《clean code》,讀到第三章函數(shù),里面列舉出了很多編寫函數(shù)的準(zhǔn)則,比如:
1. 短小
2. 只做一件事
3. 函數(shù)最好不要有參數(shù)
...
第一次讀的時候,會把這些準(zhǔn)則記下來,就像學(xué)生時代去記課本一樣,自從看了一些批判性思維書籍之后,會帶著一些問題來看待這些原則,比如:
1. 短?。ǘ嚅L的函數(shù)算短小,為什么函數(shù)需要短?。?/p>
2. 只做一件事 (什么叫一件事,比如是吃飯算一件事,還是點菜,下單,吃飯,結(jié)賬各算一件事,為什么只做一件事)
3. 函數(shù)最好不要有參數(shù)(為什么不要帶參數(shù))
...
有了問題之后會在書中尋找答案,尋找作者的論據(jù),發(fā)現(xiàn)其實作者很多準(zhǔn)則是依據(jù)經(jīng)驗總結(jié)得出,無法得出條條框框的原因,這個時候就無法去相信作者的結(jié)論,但是可以去思考作者的理由,或者是是什么樣原則推導(dǎo)出這些準(zhǔn)則出來的。
前些天看了一篇文章中也提到,平時像GOF這些設(shè)計模式是術(shù),而面向?qū)ο蟮乃季S才是道,有了道之后在遇到設(shè)計決策的時候會心中有數(shù),也就是無招勝有招。
從函數(shù)的這些準(zhǔn)則以及作者不成文的理由中看出編寫的原則只有一個:便于閱讀與理解
比如如果一個警察需要去了解一個嫌疑人一天內(nèi)做了什么,可能是需要嫌疑人先做個簡短的描敘:
早上去吃早飯,然后剪頭,去上網(wǎng),吃午飯...
然后如果對感興趣的事情詳細(xì)了解。
嫌疑人的一天就是一個函數(shù),吃早飯、剪頭、上網(wǎng)、吃午飯等等就很短小,而不是一開始就把所有的細(xì)節(jié)全盤說出。
如果嫌疑人在吃早飯的過程中去一趟銀行,這個信息對警察比較有用,但是隱含在了吃早飯中,這就類似于一個函數(shù)做了多件事,并不是不可以,但是很難用一個簡短的詞語進(jìn)行概括(函數(shù)名),也就給閱讀者帶來了困難。
等等其它的準(zhǔn)則都是基于這個原則來進(jìn)行,因此在自己設(shè)計函數(shù)時,可以參考既有的設(shè)計準(zhǔn)則,也可以自創(chuàng)一些其它的方式以及對現(xiàn)有的準(zhǔn)則進(jìn)行改良,只有便于閱讀即可。
附上部分常用準(zhǔn)則:
1. 只做一件事
2. 同一抽象層
3. 無副作用