最近重新在讀《clean code》猴仑,讀到第三章函數(shù),里面列舉出了很多編寫函數(shù)的準(zhǔn)則肥哎,比如:
1. 短小
2. 只做一件事
3. 函數(shù)最好不要有參數(shù)
...
第一次讀的時候辽俗,會把這些準(zhǔn)則記下來,就像學(xué)生時代去記課本一樣篡诽,自從看了一些批判性思維書籍之后崖飘,會帶著一些問題來看待這些原則,比如:
1. 短需九(多長的函數(shù)算短小朱浴,為什么函數(shù)需要短小)
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)辉阶,吃午飯...
然后如果對感興趣的事情詳細了解先壕。
嫌疑人的一天就是一個函數(shù)瘩扼,吃早飯、剪頭垃僚、上網(wǎng)集绰、吃午飯等等就很短小,而不是一開始就把所有的細節(jié)全盤說出谆棺。
如果嫌疑人在吃早飯的過程中去一趟銀行栽燕,這個信息對警察比較有用,但是隱含在了吃早飯中包券,這就類似于一個函數(shù)做了多件事纫谅,并不是不可以,但是很難用一個簡短的詞語進行概括(函數(shù)名)溅固,也就給閱讀者帶來了困難付秕。
等等其它的準(zhǔn)則都是基于這個原則來進行,因此在自己設(shè)計函數(shù)時侍郭,可以參考既有的設(shè)計準(zhǔn)則询吴,也可以自創(chuàng)一些其它的方式以及對現(xiàn)有的準(zhǔn)則進行改良,只有便于閱讀即可亮元。
附上部分常用準(zhǔn)則:
1. 只做一件事
2. 同一抽象層
3. 無副作用