升級 Java 程式設計規範的6個約定
作為 Java 開發人員,我們會遵循一系列的編碼風格和開發習慣。習慣使然是一方面,另一方面,我們也從不停下腳步質疑這些習慣。一段時間以後,筆者養成了一些不同於常人的編碼風格和開發習慣。當第一次瞭解到這些編碼風格時,筆者感到又驚又氣。但是,花了一段時間踐行這些習慣之後,筆者意識到它們的確能造就更加簡潔可控的程式碼庫,同時也讓開發者更加省心。
不要因這些想法的另類而否定它們,筆者建議你用幾周時間嘗試其中的一兩條,如果你仍然不喜歡它們,換回以前的程式碼風格也用不了多久時間。
零註釋(公共 API 除外)
筆者一度認為業內對於零註釋這種程式設計習慣已經達成共識,但是當與許多同事合作之後,筆者發現事實並非如此。所以,讓我們再次探討這個問題:無註釋。註釋很快就會與程式碼脫節。假如你在一段程式碼的上面寫了行註釋,誰也不能保證下一個修改程式碼的人會更新註釋。根據筆者的開發經驗,沒人會更新註釋。原來的程式碼段可能被刪除,業務需求也可能改變。因此,你的註釋往往弊大於利。
對此,有個簡單的解決方案,就是寫自記錄程式碼(self documenting code)。對變數、物件或者函式等進行命名時,選擇能清晰表達其用途的名字。假如不夠清晰,你需要對它們進行重構,將之拆分為更簡潔的形式。只要能直觀地表達其用途,過長的名字也無需擔憂。別忘了編輯器有自動填寫功能,沒人需要敲出整個識別符號的名字。
然而,公共 API 是一個明顯的例外。假如你正在建立一個準備公開發版的庫,那還是使用簡潔的方法名比較好。不過, Javadoc 對這種情況大有裨益,但也僅限此情況。
不要用 “Test” 為測試方法開頭
確實沒有必要這麼做。你寫的方法會註釋為測試,方法所在的類也存在於測試包中。明眼人都知道那是測試。其實,測試方法名應該明確指出測試的內容與條件。例如, “reversesTheWordRandomToModnar()”或者“adds70ToBalanceOf100ToMakeBalanceOf170()”,這些名字都準確表達了測什麼功能以及預期的結果。
如果你正在使用 IntelliJ ,有一款特別棒的外掛叫做 Enso 。它可以將測試名轉化成一個句子,一目瞭然地顯示測試的內容。這意味著當你在注視任何類的時候, Enso 都會展示其說明文件。
不要使用@Override
這個觀點爭議頗多,請聽筆者說完。假如你不使用 @override ,最壞的結果就是你重寫了一個函式,而呼叫時執行的卻是原版函式,而非重寫的版本。值得慶幸的是,在測試驅動開發模式下,測試整段程式碼時就會定位到這個 bug 。這讓 @Override 成了一段冗餘的程式碼。顯然,冗餘的程式碼不僅沒有好處,還會讓人分心。因此,停止使用 @Override ,而依賴 TDD(測試驅動開發)。
不要使用 getX()/setY() 這樣的函式名
這確實讓人不由得感到惱火。 getXXX 和 setXXX 這種命名方式是 Javabeans 時代的前朝遺物。而 JavaBeans 時代早已過去,這種命名方式也不再適用了。後者讓程式碼變得令人反感卻沒有帶來什麼好處。去掉 get/set 這類關鍵字有利於欄位名稱的簡潔。例如, car.engine() 函式將生成一個引擎物件,而 car.engine(new v8()) 將引擎設定為新的型號。如果需要讀取多層級內的物件(例如:car.lights().frontLeft() 對比 car.getLights().getFrontLeft()),前者依舊錶達清晰而且程式碼更加簡潔。這個程式設計習慣筆者一開始也很反對,後來逐漸改變了看法,現在非常熱衷這一風格。
可執行的程式碼>高效能的程式碼
這段內容和程式碼風格關係不大,而是更加泛泛而談。每次看到人們為了一個問題,精雕細刻地設計解決方案,花費大量的時間,筆者都會感到不悅。其實,在最基本的層面上解決問題然後測試效能。十有八九,這類方案都是高速,可擴充套件或符合其他時髦概念的。相反,筆者經常看到人們設計了一個複雜的快取解決方案,結果沒有提高效能卻把程式碼弄成一團亂麻。解決問題時,先實施你能採取的最基本方案,然後再進行優化。最起碼,這種方式能讓你有例項證明問題已經解決。
使用自己的異常型別
筆者又一次錯誤地認為這一開發習慣是業內的共識。 Java 中的檢查性異常 (Checked exceptions) 很糟糕,幾乎所有其他程式語言(例如C#)都意識到了這一點,所以它們甚至沒有這個型別。在筆者編寫的任何應用程式中,都會建立自己的異常型別,在這些應用程式中丟擲的任何異常都會用筆者建立的異常類接住,然後丟擲執行時異常。這讓程式碼更加整潔(筆者從未在程式中丟擲大量 XXXException ),也意味著筆者能通過 log 追朔異常來自程式碼的哪一部分或者這是完全出乎意料的異常型別。
(編譯自:https://dzone.com/articles/upgrade-your-code-conventions-2)
OneAPM 為您提供端到端的 Java 應用效能解決方案,我們支援所有常見的 Java 框架及應用伺服器,助您快速發現系統瓶頸,定位異常根本原因。分鐘級部署,即刻體驗,Java 監控從來沒有如此簡單。想閱讀更多技術文章,請訪問 OneAPM 官方技術部落格。 本文轉自 OneAPM 官方部落格
相關文章
- java程式設計規範Java程式設計
- 自己整理的java程式設計規範Java程式設計
- 解讀阿里java程式設計規範阿里Java程式設計
- java程式設計規約----程式碼風格(一)Java程式設計
- Java併發程式設計---java規範與模式下的併發程式設計1.1Java程式設計模式
- JS程式設計規範JS程式設計
- React程式設計規範React程式設計
- 初級程式設計師需要知道的基本程式碼規範程式設計師
- 程式設計小記-程式設計規範程式設計
- 6 個程式設計範型將改變你對程式設計的看法程式設計
- python 的程式設計規範Python程式設計
- 【程式設計素質】Java編碼約定程式設計Java
- 前端工程程式碼規範(一)——命名規則與工程約定前端
- python程式設計規範Python程式設計
- C#程式設計規範C#程式設計
- Java的13個規範Java
- 程式碼規範設定常見英文
- Go 語言程式設計規範Go程式設計
- 微信小程式元件設計規範微信小程式元件
- JavaScript模組化程式設計規範JavaScript程式設計
- iOS 團隊程式設計規範iOS程式設計
- C#程式設計命名規範C#程式設計
- 程式設計命名規範(網文)程式設計
- Swift程式設計規範:保持程式碼優美的10個方法Swift程式設計
- 好程式設計師Java分享Java開發常用規範技巧一程式設計師Java
- 高屋建瓴:梳理程式設計約定程式設計
- 程式設計師的打怪升級之路,程式設計師未來職業規劃全路線程式設計師
- 併發程式設計的12條規範程式設計
- 【JavaEE】Java的13個規範Java
- 切圖崽的自我修養-[ES6] 程式設計風格規範程式設計
- MySQL資料庫規範 (設計規範+開發規範+操作規範)MySql資料庫
- python 程式設計規範有哪些?Python程式設計
- C語言程式設計基本規範C語言程式設計
- Shell程式設計規範與變數程式設計變數
- 上位機程式設計編碼規範程式設計
- SAP官方釋出的ABAP程式設計規範程式設計
- 我總結的Android程式設計規範Android程式設計
- 名片設計規範