為什么程序員都不喜歡寫注釋?

大家好,我是啊粥。
今天我們來聊一下關(guān)于代碼注釋的問題,開始閱讀正文之前,你先想 3 個(gè)問題:
你平時(shí)寫代碼的時(shí)候會(huì)寫注釋嘛?
你的注釋是怎么樣寫的,主要都表達(dá)些什么?
你一般會(huì)在什么樣的代碼里寫注釋?

好了,我們正文開始。
首先,我個(gè)人剛開始寫代碼的時(shí)候,非常喜歡寫注釋,我一般會(huì)把代碼思路先用文字表述出來。然后分成 1 2 3 4 每一步要干什么,怎么干。
然后寫完之后開始在每個(gè)步驟下邊填代碼,這個(gè)時(shí)期我的代碼注釋量是非常高的。
但是后來隨著技術(shù)熟練程度的提高,以及代碼水平的提高,我的注釋量就逐漸減少了。
并不是我覺得自己牛逼了不用寫代碼了,也不是我想專門給后人挖坑,純粹是我覺得不太有必要了。
因?yàn)橐环矫嫖艺J(rèn)為當(dāng)你可以寫出相對(duì)比較好的代碼的時(shí)候,你的代碼就是你的注釋,你的命名、你的日志以及你的單元測(cè)試等等所有東西會(huì)共同構(gòu)建成你的完整注釋,最終他們合在一起形成的注釋遠(yuǎn)比你一字一句寫出來的注釋要更清楚更實(shí)用。
并不是只有 // 后寫的才叫注釋。
通常來說,我們?nèi)ラ喿x理解一段代碼,一般我們會(huì)有下面三種訴求:
這代碼是用來解決什么的問題的?
怎么使用這段代碼,有沒有什么注意事項(xiàng)?
這個(gè)代碼的實(shí)現(xiàn)細(xì)節(jié)是什么,它是如何運(yùn)作的?
對(duì)于第一點(diǎn)來說,Why 是很重要的,但我們需要知道,【代碼注釋通常來說都是微觀的,不是宏觀的】。
對(duì)于宏觀的東西都會(huì)寫在需求和設(shè)計(jì)文檔中,那些微觀的 Why 如果能寫成注釋確實(shí)是挺好的,因?yàn)榇a再簡單再易讀也不會(huì)告訴你 Why,這一點(diǎn)上我還是非常認(rèn)同的。
但同理,這個(gè) Why 寫成日志好像也是可以的,比如:“正在解決 XXX 問題...”,你想想是不是這么個(gè)道理?
對(duì)于第二點(diǎn)來說,怎么使用這個(gè)函數(shù),這個(gè)類,有沒有什么注意事項(xiàng)。
其實(shí),我們需要的可能是一些示例,最好是可以直接拷貝復(fù)制后改一改就可以用的示例,畢竟大家都知道寫代碼的意義就在于是粘貼復(fù)制
。

但是呢,這些示例完全可以寫成 Unit Test 單元測(cè)試案例,Positive 的案例告訴我們正常應(yīng)該怎么用,Negtive 的案例告訴我們有哪些注意事項(xiàng),不要這么用。
這比單純的代碼注釋要強(qiáng)數(shù)百倍,不是嗎?
難不成跟具體的例子相比,你更喜歡看一段話,告訴你:“請(qǐng)不要 XXX 使用這個(gè)函數(shù)”?
對(duì)于第三點(diǎn)來說,你要搞清楚代碼是怎么運(yùn)作的,我們每個(gè)寫代碼的人都知道,注釋對(duì)于你搞清代碼是怎么運(yùn)作的幾乎是沒有什么幫助的。
最好的方式就是打一些斷點(diǎn),然后 Debug 一下代碼,看代碼運(yùn)行時(shí)的那些 Context(變量里的值,狀態(tài),條件,執(zhí)行路徑等)是什么樣的?
這時(shí),注釋是低效的,把這些上下文打在 Debug log 里輸出才是最高效的。
生產(chǎn)環(huán)境可以選擇關(guān)掉 Info 或 Debug 級(jí)別的日志,然后開發(fā)的時(shí)候這些日志其實(shí)比注釋可能還好用(如果 Context 輸出比較全,且有規(guī)范)。
同時(shí)日志開關(guān)是自如的,完全可以由我們自己來進(jìn)行控制,當(dāng)你遇到 Bug 需要調(diào)試的時(shí)候你打開豐富的 Debug ,之后你可以再把他調(diào)回 Info 或者 Error。
我相信以上觀點(diǎn)可能很多人是不認(rèn)同的,但是我說真的,作為初學(xué)者你肯定會(huì)有一個(gè)需要大量注釋的階段,主要是因?yàn)槟憬?jīng)驗(yàn)還比較缺乏,所謂沒有達(dá)到熟能生巧的地步。
但時(shí),當(dāng)你寫代碼寫的足夠久了之后,你會(huì)發(fā)現(xiàn)寫得好的代碼是自注釋的,代碼既注釋,而重要的地方才寫注釋,其實(shí)就是日志 ……
當(dāng)然,還有一種情況我是建議寫注釋的,那就是二筆產(chǎn)品非要提一個(gè)不合理的需求導(dǎo)致你有一個(gè)不合理的寫法,這個(gè)時(shí)候我希望你能注明“不是我要這么寫的,是產(chǎn)品需求要求這樣的,我也沒辦法的”的無奈,免得下一任接受你代碼的人罵娘,說你是個(gè)菜雞。
好了,今天的內(nèi)容就到這里了。
你也可以留言分享你寫注釋的一些經(jīng)驗(yàn)給到我們。
我是啊粥,關(guān)注我,我們一起向上生長。
