編碼的道與禪
該文章發布在github中,如果您覺得寫的還不錯的話,可以 star 一下進行支持,傳送門:TechShare。
Bob 大叔在《代碼整潔之道》一書的前言打趣着說,當你寫的代碼在經受代碼審查時,如果審查者憤怒的吼道“What the fuck is this shit?”等言辭激烈的詞語時,那說明你寫的是 Bad Code;如果審查者只是漫不經心的吐出幾個“What the fuck?”,那說明你寫的是 Good Code。這就是衡量代碼質量的唯一標準——每分鐘罵出“What the fuck?”的頻率。
想寫出整潔的代碼很難,有一部分原因在於糟糕的代碼太容易編寫。想快點完成任務時,考慮不周全時,忽略安全時,隨意命名時,參數過多時,嵌套太深時,未及時更改註釋時,違反法則時,重複你自己時等等情形,我們有太多的機會來製造糟糕的代碼。只有嚴肅對待自己的代碼,了解哪些事情會使我們的代碼變味,才有可能寫出整潔的代碼。
寫代碼和寫文章在某種程度上有相似之處,好的文章一定有好的可讀性,寫代碼也一樣,只有優美乾淨的代碼才能具有良好的可讀性。編寫具有可讀性的代碼不光是保持有意義的命名就行,如果你想成為一名更好的程序員,寫代碼時你需要注意的有很多,比如:
- 規範本地變量的位置
- 使函數盡量短小
- 調用者盡可能放在被調用者上面
- 保持代碼擁有良好的格式
- 編寫只做一件事的函數
- 函數參數不要超過三個
- 暴露時序耦合
- 使用異常代替返回錯誤碼
除此之外,你還須牢記眾多設計原則,如:
- 開放封閉原則(OCP)
- 迪米特法則
- 依賴倒置原則(DIP)
- 單一職責原則(SRP)
- 里氏替換原則(LSP)
- 不要重複(DRY)
- 你不會需要它(YAGNI)
當然僅有這些是不夠的,這不是騎自行車,學寫整潔代碼得花許多功夫,必須不斷實踐,從失敗中提取代碼的壞味道並從中得到啟發。
編寫整潔代碼,你需要牢記並遵守很多東西,但這並不是循規蹈矩和刻板,而是對簡單之美、代碼之美的追求。代碼整潔之道,是編寫優秀代碼的一種方法,其核心是儘力使代碼保持簡單——Keep It Simple, Stupid。判斷一個人寫的代碼的好壞,不是看它的代碼寫的有多複雜,而是看他有沒有把複雜的事物抽象出來並用簡單的方式去描述它,此外這個人對代碼的態度也至關重要,大多數時候我們並不能從一開始就把代碼寫的很完美,當我們需要快速做出一個原型,或者一開始代碼看起來不錯,但新的需求使現有的設計無法滿足,如果不對設計進行改動的話,那麼代碼就會變的醜陋,如果你熱愛自己正在做的事情,崇尚代碼之美,那麼你就會有足夠的動力去重構它、完善它,而不是破壞結構使代碼腐爛。
保持簡單、追求簡單,我想這就是編碼之中的禪意,一種追求本真的境界。這種禪在 Python 的設計哲學中體現的淋漓盡致,讓我們在 Python 解釋器中輸入“import this”,來看看經典的 Python 之禪。
- Beautiful is better than ugly.
優美勝於醜陋。 - Explicit is better than implicit.
顯式勝於隱式。 - Simple is better than complex.
簡單勝於複雜。 - Complex is better than complicated.
複雜勝於難懂。 - Flat is better than nested.
扁平勝於嵌套。 - Sparse is better than dense.
分散勝於密集。 - Readability counts.
可讀性應當被重視。 - Special cases aren’t special enough to break the rules. Although practicality beats purity.
儘管實用性會打敗純粹性,特例也不能凌駕於規則之上。 - Errors should never pass silently. Unless explicitly silenced.
除非明確地使其沉默,錯誤永遠不應該默默地溜走。 - In the face of ambiguity, refuse the temptation to guess.
面對不明確的定義,拒絕猜測的誘惑。 - There should be one– and preferably only one –obvious way to do it.
用一種方法,最好只有一種方法來做一件事。 - Although that way way not be obvious at first unless you’re Dutch.
雖然一開始這種方法並不是顯而易見的,但誰叫你不是Python之父呢。 - Now is better than never. Although never is often better than right now.
做比不做好,但立馬去做有時還不如不做。 - If the implementation is hard to explain, it’s a bad idea.
如果實現很難說明,那它是個壞想法。 - If the implementation is easy to explain, it may be a good idea.
如果實現容易解釋,那它有可能是個好想法。 - Namespaces are one honking great idea – let’s do more of those!
命名空間是個絕妙的想法,讓我們多多地使用它們吧!
道着重於方法,禪着重於態度,讓我們把這兩者相結合,做一個有追求的程序員,為成為軟件匠人而奮鬥吧。
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!
※網頁設計公司推薦不同的風格,搶佔消費者視覺第一線
※Google地圖已可更新顯示潭子電動車充電站設置地點!!
※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益
※別再煩惱如何寫文案,掌握八大原則!
※網頁設計最專業,超強功能平台可客製化