升級 Java 編程規範的6個約定

做爲 Java 開發人員,咱們會遵循一系列的編碼風格和開發習慣。習慣使然是一方面,另外一方面,咱們也從不停下腳步質疑這些習慣。一段時間之後,筆者養成了一些不一樣於常人的編碼風格和開發習慣。當第一次瞭解到這些編碼風格時,筆者感到又驚又氣。可是,花了一段時間踐行這些習慣以後,筆者意識到它們的確能造就更加簡潔可控的代碼庫,同時也讓開發者更加省心。html

不要因這些想法的另類而否認它們,筆者建議你用幾周時間嘗試其中的一兩條,若是你仍然不喜歡它們,換回之前的代碼風格也用不了多久時間。java

零註釋(公共 API 除外)

筆者一度認爲業內對於零註釋這種編程習慣已經達成共識,可是當與許多同事合做以後,筆者發現事實並不是如此。因此,讓咱們再次探討這個問題:無註釋。註釋很快就會與代碼脫節。假如你在一段代碼的上面寫了行註釋,誰也不能保證下一個修改代碼的人會更新註釋。根據筆者的開發經驗,沒人會更新註釋。原來的代碼段可能被刪除,業務需求也可能改變。所以,你的註釋每每弊大於利。編程

對此,有個簡單的解決方案,就是寫自記錄代碼(self documenting code)。對變量、對象或者函數等進行命名時,選擇能清晰表達其用途的名字。假如不夠清晰,你須要對它們進行重構,將之拆分爲更簡潔的形式。只要能直觀地表達其用途,過長的名字也無需擔心。別忘了編輯器有自動填寫功能,沒人須要敲出整個標識符的名字。api

然而,公共 API 是一個明顯的例外。假如你正在創建一個準備公開發版的庫,那仍是使用簡潔的方法名比較好。不過, Javadoc 對這種狀況大有裨益,但也僅限此狀況。緩存

不要用 「Test」 爲測試方法開頭

確實沒有必要這麼作。你寫的方法會註釋爲測試,方法所在的類也存在於測試包中。明眼人都知道那是測試。其實,測試方法名應該明確指出測試的內容與條件。例如, 「reversesTheWordRandomToModnar()」或者「adds70ToBalanceOf100ToMakeBalanceOf170()」,這些名字都準確表達了測什麼功能以及預期的結果。服務器

若是你正在使用 IntelliJ ,有一款特別棒的插件叫作 Enso 。它能夠將測試名轉化成一個句子,一目瞭然地顯示測試的內容。這意味着當你在注視任何類的時候, Enso 都會展現其說明文檔。框架

不要使用@Override

這個觀點爭議頗多,請聽筆者說完。假如你不使用 @override ,最壞的結果就是你重寫了一個函數,而調用時執行的倒是原版函數,而非重寫的版本。值得慶幸的是,在測試驅動開發模式下,測試整段代碼時就會定位到這個 bug 。這讓 @Override 成了一段冗餘的代碼。顯然,冗餘的代碼不只沒有好處,還會讓人分心。所以,中止使用 @Override ,而依賴 TDD(測試驅動開發)。dom

不要使用 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 官方博客

相關文章
相關標籤/搜索