野火燒不盡,春風(fēng)吹又生。
代碼中不協(xié)調(diào)的編程風(fēng)格,就像野草一樣有頑強的生命力,永遠除不盡;
聰明的程序員立刻發(fā)現(xiàn),靠人肉去Review不是長久之計。
斬草除根,以絕后患。
于是Lint這樣的靜態(tài)代碼檢查工具中必不可少的一項就是編程風(fēng)格,大家期望在流程中加一道關(guān)卡以一勞永逸地解決該問題。
堵不如疏
風(fēng)格要保持一致
大家在編碼或Review代碼時,發(fā)現(xiàn)風(fēng)格不協(xié)調(diào)很容易,憑本能就能做到,于是達成了第一條共識:在同一上下文內(nèi)風(fēng)格要保持一致。這個上下文靈活性也可以很大:從同一種編程語言要保持同一種風(fēng)格,到同一個項目內(nèi),還可以小到同一個源文件內(nèi),甚至同一個函數(shù)內(nèi)。一切全憑Review代碼時的心情。
還是不服
風(fēng)格保持一致,并沒有解決問題,總有人跳出來抱怨受不了前任的代碼風(fēng)格。
不患寡而患不均
爭論到了這個層次,事情本身-編程風(fēng)格是什么已經(jīng)不重要,重要的是-為什么是你的,而不是我的。
知其然,知其所以然
好的編程風(fēng)格指南長什么樣
- 告知WHY
好的編程風(fēng)格會明確告訴你規(guī)約產(chǎn)生的背景及要解決的問題。
如Angular的Style Guide對每個Style都有Why?的條目解釋;
Alibaba的Java Coding Guidelines有Note條目。 - 分級
不是每條規(guī)約都一樣重要,可適當抓大放小。
如Alibaba的Java Coding Guidelines依據(jù)約束力強弱及故障敏感性分為三個等級:Mandatory,RecommendedandReference。
Angular的Style Guide則分為Do和Consider兩級。 - 給出正反例
一圖勝千言,一個例子可以讓大家秒懂這條規(guī)約。
如Google Java Style Guide有正例和Exception例子;
Angular Style Guide有正例和avoid例子;
Alibaba的Java Coding Guidelines有Positive example和Counter example。
問題解決了嗎
這樣的風(fēng)格指南像法律條文一樣,做為編程智慧的結(jié)晶,倒是解決了爭議的問題。
知法犯法的問題也有執(zhí)法機構(gòu)來解決,可不知法呢?