我们真的需要统一的编程规范?
大家是否發(fā)現(xiàn)把時(shí)間浪費(fèi)在討論編碼規(guī)范的分歧上,事后又覺得那些都是徒勞無(wú)功的事情。
每個(gè)人都希望有人贊賞他的編碼風(fēng)格。就像多年前的我一樣,在那時(shí)(相對(duì)于今天來(lái)說(shuō)),C語(yǔ)言還是那種擁有多個(gè)競(jìng)爭(zhēng)風(fēng)格的語(yǔ)言。這里有K&R風(fēng)格,但從未引起我的興趣并且當(dāng)時(shí)還有其他需要編譯的事情。有些人開發(fā)是基于一種美學(xué)的編碼風(fēng)格,還有的基于可讀性或者其他方面的——采用堂吉訶德式的信仰來(lái)編寫,if(4==y)的這種風(fēng)格,可以提高代碼的正確性。我個(gè)人的編碼風(fēng)格是從那個(gè)時(shí)候開始的,我擁有一個(gè)屬于自己的C語(yǔ)言雜志,為了讓代碼盡可能清晰的打印在雜志上,所以我盡可能多留一些垂直空間并且在操作符號(hào)周圍多使用一些空格。即使今天,代碼打印出來(lái)后仍能清晰地閱讀。Java代碼編寫風(fēng)格也這樣。C語(yǔ)言編碼風(fēng)格繼承并稍作些調(diào)整,但至少對(duì)于我來(lái)說(shuō),打印效果還是非常棒。
在我工作過(guò)的許多網(wǎng)站都進(jìn)行過(guò)長(zhǎng)期地討論,怎樣才是最好的編碼風(fēng)格?我見過(guò)許多開發(fā)人員抱怨被迫采用一些規(guī)范,使他們的語(yǔ)法和語(yǔ)義被破壞。對(duì)于這些規(guī)范,甚至多年前,我的感覺就像是一個(gè)成年代碼保姆。關(guān)于這種辯論的核心莫過(guò)于可選字符的使用、大括號(hào)位置、代碼塊如何縮進(jìn)、空白空間的大小、注釋格式以及語(yǔ)句聲明等。鑒于如此豐富的細(xì)節(jié),任何帶有偏好的明智組合都不可能提供如此高的競(jìng)爭(zhēng)性集合。這根本是不值得進(jìn)行討論的。
有一個(gè)比較重要的問(wèn)題是,在一個(gè)不同理論風(fēng)格的網(wǎng)站下面,開發(fā)人員允許使用彼此最舒服最擅長(zhǎng)的編碼風(fēng)格,這樣就會(huì)導(dǎo)致如下幾個(gè)問(wèn)題:首先,有些程序員的編碼風(fēng)格會(huì)很奇怪;其次在一個(gè)代碼庫(kù)里面可能有多種編碼風(fēng)格,代碼很難讀尤其當(dāng)多個(gè)人去維護(hù)的時(shí)候;最后,在代碼被維護(hù)或者更新的時(shí)候,許多開發(fā)人員會(huì)根據(jù)他們的喜好重組代碼塊。這些會(huì)使一些毫無(wú)意義的增量在代碼里面生成,這樣維護(hù)起來(lái)不僅僅浪費(fèi)時(shí)間,而且會(huì)讓代碼越來(lái)越亂,反而增加維護(hù)成本。
采用單一的編碼風(fēng)格是網(wǎng)站最佳的解決方案。堅(jiān)持統(tǒng)一的編碼風(fēng)格是至關(guān)重要的,但很少有兩個(gè)網(wǎng)站或者公司的編碼風(fēng)格是一樣的,所以當(dāng)開發(fā)人員加入到新團(tuán)隊(duì)以后,還是會(huì)浪費(fèi)一些時(shí)間。在我看來(lái),最佳的解決方案是讓語(yǔ)言設(shè)計(jì)者在設(shè)計(jì)時(shí)盡可能地多采用些風(fēng)格,這種方法可以大大方便閱讀和代碼編寫,語(yǔ)言設(shè)計(jì)者已經(jīng)慢慢認(rèn)識(shí)到它的好處。在早期的語(yǔ)言中,例如上面提到的C語(yǔ)言,但是Fortran卻更加瘋狂,它甚至在關(guān)鍵字后邊都不需要留有空格,這使得各種各樣的形式都涌現(xiàn)出來(lái),并且還移交給那些不幸者維護(hù)了幾十年。
不過(guò)在近期,語(yǔ)言已經(jīng)加強(qiáng)了這方面的要求。Python對(duì)代碼塊有非常嚴(yán)格的縮進(jìn)風(fēng)格。谷歌的新興系統(tǒng)語(yǔ)言Go,對(duì)括號(hào)的打開有了位置要求:在新行上,它們不可以成為第一個(gè)字符。某種意義上來(lái)說(shuō),Go語(yǔ)言的打開括號(hào)已經(jīng)解決支持K&R這種編程風(fēng)格。更重要地是,Python開發(fā)人員并沒有對(duì)縮進(jìn)有所抱怨,就像新興Go程序員一樣,對(duì)括號(hào)位置沒有任何怨言。
這種可接受性表明,開發(fā)人員變得更加明智——承認(rèn)風(fēng)格一致性所帶來(lái)的好處以及多樣性所浪費(fèi)的成本。追求這種主題,語(yǔ)言設(shè)計(jì)者將朝著這種方向走的更遠(yuǎn)。如今代碼庫(kù)已經(jīng)越來(lái)越大——本周將完成1000萬(wàn)行代碼,這絕對(duì)不是個(gè)非常大的數(shù)字——編譯后擁有統(tǒng)一的代碼風(fēng)格并且強(qiáng)調(diào)可讀性和刪除那些“喋喋不休”的代碼在很久以前就已經(jīng)解決。作為一個(gè)單獨(dú)的個(gè)體來(lái)說(shuō),我很愿意拋棄我已使用多年的編碼風(fēng)格來(lái)滿足那些單一的、可讀的、可委托方法的代碼。
總結(jié)
以上是生活随笔為你收集整理的我们真的需要统一的编程规范?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 高质高效软件开发组织能力模型
- 下一篇: TabControl控件和TabPage