來源:7 Tips to Write Better Java Code You Should Know
作者:Nathanael Yang
譯稿:51CTO.com
1.使用IntelliJ IDEA作為您的內建開發環境(IDE)
2.使用JDK 8或更高版本
3.使用Maven/Gradle
4.使用Lombok
5.編寫單元測試
6.重構:常見,但也很慢
7.定期聯絡客戶,以擷取他們的回報
總結
在每一位剛入行的程式員的心中,編寫程式都是一門神聖的藝術創作。他們無不希望自己的代碼作品既簡潔清晰,又可讀性強,而且還具有一定的容錯能力。
本文将為您帶來七點建議和技巧,以幫助您編寫出簡潔、幹練的Java代碼。其中的有些可能會讓你覺得有些不可思議,但是請相信我,如下的每一條我都親身實踐過的。
雖然我已經使用了六年的Eclipse和三年的NetBeans,而且我仍然偶爾會使用到它們,但是如今的大部分時間,我隻使用IntelliJ IDEA。我并不是想在這裡展開有關IDE的大讨論,而隻是想告訴您,IDEA能夠根據其自有的最佳整合實踐标準,持續提示您寫出更短、更好、更簡潔的代碼。
您隻需要按下Alt + Enter組合鍵,它就會自動開始為您工作了。在大多數時候,IntelliJ IDEA能夠為您提供各種智能且實用的代碼建議。
為了更好地擷取IDEA的服務性能,您最好在自己的電腦上采用固态硬碟(SSD)。就我自己的那台舊式筆記本電腦而言,由于使用的是傳統硬碟(HDD),它已無法順暢地運作IDEA了。是以我個人建議您至少使用一顆256 GB大小的固态硬碟。
JDK 8及其更高版本引入了諸如:lambda 表達式(lambda expression,一種匿名函數)、功能接口、流式接口(stream APIs,提供更為可讀的源代碼實作方法)等許多新的功能,這些都有助于您寫出更簡短、更高性能的Java代碼。
當然,您并不需要去逐一地記住這些功能,因為前面提到的IDEA會幫助您在實際程式設計的過程中,實作這些功能與服務。這也就是為什麼我首先向您建議使用IDEA的原因。如果您感興趣,也可以參考《On-Java-8_Zh_latest》一書,需要的可以關注公衆号:有故事的程式員領取。
請使用Maven(一個采用純Java編寫的開源項目管理工具,請參見)或Gradle(一個基于Apache Ant和Maven的項目自動化建構工具,請參見)來管理代碼中的依賴關系,以及建構和部署自己的項目。
如果您已經為許多項目建立了可複用各種基本庫,那麼如果僅僅是内部使用的話,您可以引入Nexus(一種Maven存儲庫的管理器)來進行管理。否則,您應該将它們直接部署到Maven的中央存儲庫中。
是時候向setter/getter、hashcode/equals、以及constructors/toString等樣闆式代碼(boilerplate code)說再見了,您隻需要一個注解:- @Data - 就能統統搞定了。
Lombok 是一款可以通過簡單的注解形式,來幫助開發者簡化并消除Java代碼臃腫的工具(具體請參見)。它不但能夠減少您的代碼編寫量,還能夠幫助您打理那些生成的位元組碼。
可測試的代碼通常意味着在組織結構上具有更合理、更簡潔的代碼品質。因為它會驅使您去事先管理好各個類之間的關系、各種方法的通路級别、以及其他方面。我甚至發現:即使是最小的單元測試也能夠促進更快、更便捷的開發程序,進而能夠讓自己寫出更加短、平、快的Java代碼。
當然在現實開發工作中,您總會聽到一些諸如“我根本沒有時間來編寫單元測試”或“項目時間節點将至,不要浪費時間些單元測試了”之類的反對意見。這些聽起來貌似很合理,但是根據我的經驗,在多數情況下,事實并非如此。
如果您沒有時間去編寫單元測試,那您是否有更多的時間,去修複代碼中那些可見、或不可見的bug呢?如果跳過了單元測試,那些倉促完成的代碼将無法保證穩定性。特别對于一些新的代碼變更而言,您完全無法通過及時的回報途徑,知曉那些新産生的代碼是否存在着錯誤隐患,是否會在将來運作的某個特定場景中産生不可預知的異常問題。
一般而言,Junit和TestNG是兩款非常優秀的Java應用、及單元測試架構。而我個人則更喜歡使用TestNG。
簡潔幹練的Java程式代碼從來不是一蹴而就的,它往往需要您進行反複地琢磨與改進。通過逐行進行代碼重構、和運作各種測試用例,您可以確定自己的更改不會破壞既有代碼的正确功能。同樣,IDEA極大地提供了對于代碼重構的支援,其中包括提取方法(extract method,将某個大的函數拆分為多個小函數)、重命名、内聯(inline)等功能。
當然,如果您對代碼重構是什麼,以及它的作用不太了解的話,Martin Fowler的經典著作《重構:改善既有代碼的設計(第2版),Refactoring: Improving the Design of Existing Code (2nd Edition)》(請詳見)絕對是一本您必備的參考書。
最後一點,可能也是最重要的:客戶花錢讓您通過編寫代碼,來解決他們的問題、滿足他們的需求、并解決他們的痛點。然而,您可能在不知不覺中花費了太多的時間,去實作自以為重要、卻對客戶無關緊要的特殊功能,進而忽略了代碼整體的健壯性和可維護性。那麼,我們怎麼才能夠盡早地發現該問題呢?請保持與客戶經常聯系,以盡早地擷取他們的回報。
話說回來,知易行難,即使是富有經驗的産品經理也不一定能在較短的時間内領悟需求的真谛,何況是那些滿腦子隻注重功能實作的“碼農”們呢?
是以,一個實用的建議是:如果您不能直接聯絡到最終使用者的話,請盡量與該系統的産品經理、或運維人員進行禮貌、且頻繁的溝通。磨刀不誤砍柴工,這些時間的投入對于後期時間的節省是絕對值得的。
在過去的多年程式設計實踐和項目應用中,我一直受益于上述七點心得。在此,我希望它們也同樣能給您的代碼工作帶來幫助。祝您程式設計愉快!
歡迎工作一到五年的 Java 工程師朋友們加入 Java 進階架構學習交流:970481660,群内提供免費的
Java 架構學習資料(裡面有高可用、高并發、高性能及分布式、Jvm 性能調優、Spring 源碼,
MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx 等多個知識點的架構資
料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶
惰!趁年輕,使勁拼,給未來的自己一個交代!
需要本資料全部面試題的,可以關注公衆号:有故事的程式員!領取
這篇文章裡面包括的面試題都有,還包括了高可用、高并發、高性能及分布式、Jvm 性能調優、Spring 源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx 等多個知識點的架構資料)都可以來領取!合理利用自己每一分每一秒的時間來學習提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!