我們真的需要統一的編程規范?

摘要:仁者見仁智者見智,編碼風格的不同,對項目也會有不同的影響,統一的編碼規范有益于項目的維護。俗話說,沒有規矩不成方圓,在2004年,UNIX創始人之一的Ken Arnold就發表了一篇很幽默文章:Style is Substance,文中強調了編碼風格的重要性。

大家是否發現把時間浪費在討論編碼規范的分歧上,事后又覺得那些都是徒勞無功的事情。

每個人都希望有人贊賞他的編碼風格。就像多年前的我一樣,在那時(相對于今天來說),C語言還是那種擁有多個競爭風格的語言。這里有K&R風格,但從未引起我的興趣并且當時還有其他需要編譯的事情。有些人開發是基于一種美學的編碼風格,還有的基于可讀性或者其他方面的——采用堂吉訶德式的信仰來編寫,if(4==y)的這種風格,可以提高代碼的正確性。我個人的編碼風格是從那個時候開始的,我擁有一個屬于自己的C語言雜志,為了讓代碼盡可能清晰的打印在雜志上,所以我盡可能多留一些垂直空間并且在操作符號周圍多使用一些空格。即使今天,代碼打印出來后仍能清晰地閱讀。Java代碼編寫風格也這樣。C語言編碼風格繼承并稍作些調整,但至少對于我來說,打印效果還是非常棒。

在我工作過的許多網站都進行過長期地討論,怎樣才是最好的編碼風格?我見過許多開發人員抱怨被迫采用一些規范,使他們的語法語義被破壞。對于這些規范,甚至多年前,我的感覺就像是一個成年代碼保姆。關于這種辯論的核心莫過于可選字符的使用、大括號位置、代碼塊如何縮進、空白空間的大小、注釋格式以及語句聲明等。鑒于如此豐富的細節,任何帶有偏好的明智組合都不可能提供如此高的競爭性集合。這根本是不值得進行討論的。

有一個比較重要的問題是,在一個不同理論風格的網站下面,開發人員允許使用彼此最舒服最擅長的編碼風格,這樣就會導致如下幾個問題:首先,有些程序員的編碼風格會很奇怪;其次在一個代碼庫里面可能有多種編碼風格,代碼很難讀尤其當多個人去維護的時候;最后,在代碼被維護或者更新的時候,許多開發人員會根據他們的喜好重組代碼塊。這些會使一些毫無意義的增量在代碼里面生成,這樣維護起來不僅僅浪費時間,而且會讓代碼越來越亂,反而增加維護成本。

采用單一的編碼風格是網站最佳的解決方案。堅持統一的編碼風格是至關重要的,但很少有兩個網站或者公司的編碼風格是一樣的,所以當開發人員加入到新團隊以后,還是會浪費一些時間。在我看來,最佳的解決方案是讓語言設計者在設計時盡可能地多采用些風格,這種方法可以大大方便閱讀代碼編寫,語言設計者已經慢慢認識到它的好處。在早期的語言中,例如上面提到的C語言,但是Fortran卻更加瘋狂,它甚至在關鍵字后邊都不需要留有空格,這使得各種各樣的形式都涌現出來,并且還移交給那些不幸者維護了幾十年。

不過在近期,語言已經加強了這方面的要求。Python對代碼塊有非常嚴格的縮進風格。谷歌的新興系統語言Go,對括號的打開有了位置要求:在新行上,它們不可以成為第一個字符。某種意義上來說,Go語言的打開括號已經解決支持K&R這種編程風格。更重要地是,Python開發人員并沒有對縮進有所抱怨,就像新興Go程序員一樣,對括號位置沒有任何怨言。

這種可接受性表明,開發人員變得更加明智——承認風格一致性所帶來的好處以及多樣性所浪費的成本。追求這種主題,語言設計者將朝著這種方向走的更遠。如今代碼庫已經越來越大——本周將完成1000萬行代碼,這絕對不是個非常大的數字——編譯后擁有統一的代碼風格并且強調可讀性刪除那些“喋喋不休”的代碼在很久以前就已經解決。作為一個單獨的個體來說,我很愿意拋棄我已使用多年的編碼風格來滿足那些單一的、可讀的、可委托方法的代碼。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450786.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450786.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450786.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

百度云重磅發布ABC 3.0 尹世明如何詮釋百度云的“新”打法

雷鋒網9月4日消息,2018百度云智峰會正式召開,百度總裁張亞勤發表題為《新技術驅動,全面進入Cloud2.0》的演講并表示,經歷了PCClient/Server到MobileCloud 1.0,再到如今的AICloud 2.0過程,新技術推動云計算產…

EcmaScript對象克隆之謎

先談談深拷貝 如何在js中獲得一個克隆對象,可以說是喜聞樂見的話題了。相信大家都了解引用類型與基本類型,也都知道有種叫做深拷貝的東西,傳說深拷貝可以獲得一個克隆對象!那么像我這樣的萌新自然就去學習了一波,我們能…

開發人員眼中最好的代碼編輯器是誰?

摘要:對開發人員來講,開發工具就好比戰場上的“兵器”,不同領域的開發人員他們所使用的“兵器”也不完全相同,本文從友好性、功能性、擴展等多方面總結了最受開發人員歡迎的“兵器”。你最愛的那個在這里嗎? 如果我們把…

關于RESTful一些注意事項,接口開發規范

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 最近在研究restful,公司開發要使用,所以自己就去網上找了好些資料,并整理了一套公司開發的接口規范。…

【老杜】MySQL—day01

文章目錄day01課堂筆記1、數據庫概述及數據準備1.1、什么是數據庫1.2、什么是數據庫管理系統1.3、SQL概述1.4、安裝MySQL數據庫管理系統。1.4、MySQL數據庫的完美卸載!1.5、MySQL的服務1.6、用命令來啟動和關閉mysql服務1.7、登錄mysql數據庫2、MySQL常用命令&#…

【轉載】DRuid 大數據分析之查詢

轉載自http://yangyangmyself.iteye.com/blog/23217591、Druid 查詢概述上一節完成數據導入后,接下來講講Druid如何查詢及統計分析導入的數據。Druid的查詢是使用REST風格的HTTP請求查詢服務節點(Broker、Historical、Realtime),這…

記錄 Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentExce

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 報錯如題: Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentException: Pa…

[轉]簡單的動態修改RDLC報表頁邊距和列寬的方法

本文轉自:http://star704983.blog.163.com/blog/static/136661264201161604413204/ 1.修改頁邊距 XmlDocument XMLDoc new XmlDocument();XMLDoc.Load(System.Windows.Forms.Application.StartupPath "\Report_try-2.rdlc");XmlNamespaceManager xmn n…

函數式編程語言天生就慢嗎?

摘要:近期,函數式編程得到了越來越多的關注,Lisp不僅重獲青春還涌現出了一批新函數式編程語言。因此開發者們對函數式編程語言的運行快慢各抒己見,展開激烈討論。本文將和大家一起討論,函數式編程語言真的就慢嗎&#…

【老杜】MySQL—day02

文章目錄day02課堂筆記1、把查詢結果去除重復記錄【distinct】10、連接查詢10.1、什么是連接查詢?10.2、連接查詢的分類?10.3、當兩張表進行連接查詢時,沒有任何條件的限制會發生什么現象?10.4、怎么避免笛卡爾積現象?…

vue根據數組對象中某個唯一標識去重

由于在vue中,會自動在數組和對象中加入_obser__觀察者模式的一些屬性,所以直接用數組的filter去重(下面這種),indexOf不能準確識別 var arr [1, 2, 2, 3, 4, 5, 5, 6, 7, 7]; var arr2 arr.filter(function(x, index…

Springsecurity之AuthenticationProvider

2019獨角獸企業重金招聘Python工程師標準>>> 注意:AuthenticationProvider與Authentication緊密聯系,關于Authentication,看我的這篇博客。 先上一張圖,如下圖1 圖1 AuthenticationProvider的類圖 AuthenticationProvi…

Postman使用入門

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Postman測試管理的單位是測試集(Collections),測試集內可以創建文件夾(Folder)和具體的請求(Requests…

編程需要知道多少數學知識?

摘要:許多人認為在開始學習編程之前必須對數學很在行或者數學分數很高。但一個人為了編程的話,需要學習多少數學呢? 實際上不需要很多 。這篇文章中我會深入探討編程中所需要的數學知識。 下面是我在reddit的子論壇 r/learnprogramming 看到的…

HDU 6071 Lazy Running

鏈接HDU 6071 Lazy Running 給出四個點1,2,3,4,1和2,2和3,3和4,4和1之間有路相連,現在從2點出發,最后回到2點,要求路徑大于等于\(K\),問路徑長度最…

vue彈窗插件實戰

vue做移動端經常碰到彈窗的需求, 這里寫一個功能簡單的vue彈窗 popup.vue <template><div class"popup-wrapper" v-show"visible" click"hide"><div class"popup-text">{{text}}</div></div> </temp…

【狂神說】Redis筆記

文章目錄1、Nosql概述1.1 為什么要用Nosql1.2 什么是NoSQL1.3 阿里巴巴演進分析2、NoSQL的四大分類3、Redis入門3.1 概述3.2 Windows安裝3.3 Linux安裝3.4 測試性能3.5 基礎的知識4、五大數據類型4.1 Redis-Key4.2 String&#xff08;字符串&#xff09;4.3 List&#xff08;列…

Postman用法說明

見&#xff1a;http://blog.csdn.net/flowerspring/article/details/52774399 Postman用法簡介-Http請求模擬工具 在我們平時開發中&#xff0c;特別是需要與接口打交道時&#xff0c;無論是寫接口還是用接口&#xff0c;拿到接口后肯定都得提前測試一下&#xff0c;這樣的話就…

位、字,字節與KB的關系?

位&#xff1a;我們常說的bit&#xff0c;位就是傳說中提到的計算機中的最小數據單位&#xff1a;說白了就是0或者1&#xff1b;計算機內存中的存儲都是01這兩個東西。 字節&#xff1a;英文單詞&#xff1a;&#xff08;byte&#xff09;&#xff0c;byte是存儲空間的基本計量…