其實這要看你的抽象化程度
一般在閱讀程式的時候除非有必要,否則都不會追究到程式架構的最底端
我們都會在抽象化程度偏高的地方瀏覽,真的有需要才會再往下一層去檢視實作
如果你的程式會讓閱讀者想要看裡面的實作通常代表
1. 你的設計沒辦法交代清楚它到底確切在做什麼?需要什麼?使用時機?使用限制?…
…
一些慣例(命名慣例,design patterns…)可以讓閱讀者一眼就取得這些隱含的資訊
2. 這個東西的功能太神奇了(程式行為超出預期),超出一般人的預期
像是 qt 的 signal slot 機制就會讓第一次接觸的人摸不著頭腦
因為它用名稱來配對 signal slot 的做法不是標準的 c++ 語言可以做到的
3. 底層程式有蟲,要抓蟲啦
4. 你的 code 很漂亮,很能夠引人入勝,讓人家很想一直繼續往下看 XD
所以說,要是有一個好的設計
那麼閱讀者根本就不需要去看那些效率取向的,最佳化過後的難懂的實作
因為你的設計就已經提供給閱讀者他想要的所有資訊
根本不需要自己去閱讀實作慢慢推敲啊
以上是對於提升整個系統整體的可讀性,如果是要考慮實作本身的可讀性的話
那麼重點就會放在職責的切割和分配
最快最有效率的檢查方式就是看在同一個 block 內的 code 的抽象化程度是否差不多
要是上一行是系統頂層的操作,下一行又是底層的東西,看起來一定很痛苦吧
而且這樣把兩個不同階層的東西綁在一起就是在製造多餘的相依性
回到原 po 演算法取捨的問題,我會推 policy based design
它不但保留了程式的擴充性,又不損失效能,超美的 XD
※ 引述《gitignore (git)》之銘言:
: 最近上班在思考這問題
: 假如今天有個 O(log n) 的方法可以寫出一個東西
: 但是程式碼無法簡化 以後維護的人應該也會很痛苦
: 因為不直觀
: 另一個就是程式碼非常簡潔 但就一定是O(n) 甚至 O(n^2)
: 不知道大家會傾向於哪種?
: 我個人是比較喜歡clean code 因為過一陣字自己回來維護也比較快上手
: 但是感覺在學校學這麼多 就是要能寫出效率較好的程式碼