1. 程式人生 > >如何寫出優美的java程式碼(轉載)

如何寫出優美的java程式碼(轉載)

一、不要使用魔法數字,儘量定義列舉、常量、巨集:
我常常見到表示各種狀態的數字,0,1,2....,我真的不知道這表示什麼含義,如果
你在不在文件中說明的話,這個東東過幾天連你自己都不知道個一二三了。

二、命名要具有描述力,儘量使用全名而不是自創的縮寫,除非地球人都這麼用這個縮寫:
我常常看到一些自創的縮寫,這個縮寫或許只有你自己知道,類名,方法名,引數名
尤其要有好的描述裡,區域性變數尚可容忍。我寧可容忍超過40個字元的命令,也不願意
看到只有一兩個字母的命名,當然迭代用的i,j除外。當然命名不要太長,太長說明你的類和
方法要做的事情太多,請你拆分出更多細粒度功能單一的類和方法。

三、同一類東東命名方式儘可能統一,比如類名使用大寫字母開頭的單詞,變數使用
下劃線分割開來的小寫字母單詞,常量使用下滑線分割的開來的大寫字母單詞。不要
交替使用。

四、函式、類功能儘可能單一,不要試圖寫一個萬能/超級函式或者類。
一個類和方法要有單一的職責,這樣的類和方法只做一件事,並且容易把他做好。
1、不要試圖寫一個強大無比的方法。
我常常看到一些試圖寫的多麼“精妙”無比多麼“強大”的函式,事實上不是什麼精妙,而是
程式碼的臭味道。精妙強大無比萬能的方法往往你耗費大量精力去設計演算法,試圖覆蓋現在的各
種可能,而無法面對將來新的需求,隨著新的需求,你的這個精妙的方法需要的修改並且改起來
極其痛苦。在一次次的痛苦與精妙的演化中,你的方法越來越複雜,並且每一次修改你都會面
臨影響以前功能的風險。這個方法使用者需要小心的處理你的精妙之處,如果沒有精妙傳遞好參
數,那麼這個方法再也不精妙了,而是直接廢掉了。
KISS(keep it simple and stupid)原理就是這個道理,你要使你的程式碼儘可能簡單,讓人
看到有一目瞭然的清爽,而不是因為設計了一個精妙無比的萬能方法而沾沾自喜。這裡的簡單不是
簡潔的代名字。有時候簡潔是那種傳說的“精妙”的程式碼。
2、不要寫做多件事情的方法和類,你做一件事情,你就寫一個對應的方法,不要試圖通過引數來判定各種情況,然後做事情,並且做的事情和你方法描述的不一致。當你發現你的方法名字想不出來好的名字了,或者要加or和and了,那麼請你拆分出更多單一的方法。
不要舉一些linux完成多種功能系統呼叫,這是被迫的,因為系統呼叫的數量是有限制的,它只有有限的空間來描述系統呼叫號和系統呼叫的對映表,不要在應用程式開發中效仿而誤以為優雅強大。我最噁心根據引數,然後一大堆的if..else 和switch..case判斷。
五、不要修改已有的類和方法而是擴充套件它。
這是程式設計的一個重要原則,開閉原則,在面向物件的語言中尤為重要。在面向過程中主要表現在,不要在一個函式要應對和這個函式相似的一個需求了,就在這個加個if,來修改這個方法,試圖重用和避免重複。而是要把公用的部分抽出來成一個小的功能函式,然後增加一個應對新的類似這個需求的處理方法。在面向物件中,例如使用策略模式、訪問者模式、Extend Object模式。
六、不要重複你自己(DRY):
程式最怕的是copy,paste,到處是重複的程式碼。copy,paste經常被誤以為快速完成需要用的功能的高效方式而被到處使用。你每重複一次,你就得負責保持他們的一致性,你就得在一處增加新的功能時,你就的把這個的功能加到其他地方。還在我剛會寫程式碼的時候去了一個小公司,他們的程式碼到處是copy,paste的痕跡,當要在現有的功能增加審計功能是,他們開始下命令了,每個人加幾行程式碼來做審計,真不知道那麼多人寫的審計版本,分散到那麼多處,這個審計功能是否可信有用。
避免DRY的方法就是抽象,分離變化。不管是面向物件還是面向過程,分離變化並抽象之是最主要的設計原則。設計模式中的模板方法,我們常用的回撥都是我們常用的方法。
我發現越是提供更多回調處理的語言和框架,就越具有靈活性和易用性。ruby語言之所以有如此的威力,主要是因為它提供了更多的回撥處理。它可以在動態的給一個類增加方法,這樣可以在超類中定義增加方法的方法,然後再子類呼叫,子類就具有無比的能力。它的block提供了強大的回撥機制,我只要不知道如何處理了我就yield出來,method missing機制更是神祕無比,你可以寫出像find_by_name_and_age,2.days.ago這樣像自然語言一樣易讀的程式碼。

七、不要跨越邊界,在適合的地方寫程式碼。
在分層的架構中,不要跨越層的邊界。例如web開發的三層架構:
資料訪問層(DAO)、業務層(Service)、表現層。
不要在業務層裸寫SQL來做事情,不要在業務層摻和進來表現層的東東,不要在表現層/控制器中寫業務的東東。既然已經分層了,那麼就要好好的遵守它,如果到處跨越邊界的話,那麼和不分層沒有什麼區別,使得每一層都不倫不類。例如你應該在業務層進行事務管理,而你的控制器到處是業務程式碼,那將無法控制。如果你的業務層到處是SQL,我不知道你的DAO存在的意義了。
八、分層的web架構:
DAO層最好按照模型來劃分dao類,如果業務很簡單,也可以將相關的模型合併為一個DAO。
Service層,不要按照DAO和Service一一對應的方式劃分,而是要按照業務的類別和實際情況來劃分。事實上Service層通常是用來處理涉及到多個模型的業務,而涉及到一個模型的業務,常常被放在模型中,這是一種自然而更面向物件的設計方法。只有資料的模型被稱為貧血型模型,這種模型被認為是對面向物件的一種背離,而在模型中放置專有的業務方法,不僅有利於公用,而且模型更具有描述力。
九、關於MVC:
MVC是一種鬆耦合的設計方案,最容易誤用的就是控制器(c)。控制器只負責呼叫業務方法,準備好資料供View去展現。而不要把業務和如何展示的東東放在裡面。我常常看到有人在控制器中拼html片段和寫一些業務相關的程式碼。
十、順便說一下異常的使用。
如果你是使用語言支援異常機制,那麼儘可能的使用異常機制和定義好與自己業務相關的異常,而不是通過返回值表示正確和錯誤。如果你使用的語言支援異常機制,請不要寫類linux下c似的程式碼形式,每寫一個函式,我就寫一個判斷返回值呼叫是否成功,嚴重分離了我對核心業務的關注。異常提供了優雅的處理錯誤的方法。

總之,你在寫程式碼的時候,你儘量考慮使用你介面的人和閱讀你程式碼的人,不要讓他們不爽。
先寫到這裡,希望對大家有所幫助


本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/virgoboy2004/archive/2009/07/30/4394110.aspx

相關推薦

《程式設計珠璣》程式碼之路12:如何用C/C++實現array[-1]並利用它優美程式碼

我們就以最大子陣列和為例: 最大子段和問題:給一組數,計算最大子段和。 在部落格:最大欄位和的6種解法,解法三中,我們提到了儲存前i項和的操作: cache[i]代表前i-1項之和,因為在c/c++中,cache[-1]會越界,所以如果用cache[i]代表前i項和的話,那麼在用遞推公式

優質Java程式碼的4個技巧

我們平時的程式設計任務不外乎就是將相同的技術套件應用到不同的專案中去,對於大多數情況來說,這些技術都是可以滿足目標的。然而,有的專案可能需要用到一些特別的技術,因此工程師們得深入研究,去尋找那些最簡單但最有效的方法。本文我們將介紹一些有助於解決常見問題的通用設計策略和目標實現技術,即: 只做有目的性的優化

如何優美java程式碼(轉載)

一、不要使用魔法數字,儘量定義列舉、常量、巨集: 我常常見到表示各種狀態的數字,0,1,2....,我真的不知道這表示什麼含義,如果 你在不在文件中說明的話,這個東東過幾天連你自己都不知道個一二三了。二、命名要具有描述力,儘量使用全名而不是自創的縮寫,除非地球人都這麼用這個縮

如何優美的 JavaScript 程式碼

一、變數相關 (1)變數數量的定義 NO:濫用變數 let kpi = 4; // 定義好了之後再也沒用過 function example() { var a = 1; var b = 2; var c = a+b; var d = c+1; var e =

C語言:如何優美的 C 程式碼

面向物件的語言更接近人的思維方式,而且在很大程度上降低了程式碼的複雜性,同時提高了程式碼的可讀性和可維護性,傳統的 C 程式碼同樣可以設計出比較易讀,易維護,複雜度較低的優美程式碼,本文將通過一個實際的例子來說明這一點。 基礎知識 結構體 除了提供基本資料型別外,C 語言還提供給使用者自

java程式設計-如何優雅的程式碼

1. java判斷null!=a和a!=null的區別? 正常來說沒有區別,我們想判斷a是否為null, 可以寫if(a==null), 但是這有個問題,一不小心手滑了就寫成if(a=null). 在不少語言裡這是可以編譯&執行的,並且得不到你希望的結

程式設計師如何優雅的程式碼

一直以來,關於“程式碼規範”的話題都備受關注,業界甚至有很多流傳甚廣的段子不斷調侃之。既然程式碼規範能引起這麼大的共鳴,那麼今天我們談談一個程式設計師的自我修養——如何寫出優雅的程式碼? Martin(Bob大叔)曾在《程式碼整潔之道》一書中說:當你的程式碼在做 Code Review 時,審查

驚!女朋友用Python幾行程式碼就監控了我的電腦,吃雞被發現了

    今天帶給大家一個非常有意思的 python 程式,基於 itchat 實現微信控制電腦。你可以通過在微信傳送命令,來拍攝當前電腦的使用者,然後圖片會發送到你的微信上。甚至你可以傳送命令來遠端關閉電腦。 學習Python中有不明白推薦加入交流裙  

力薦!這些工具可以幫你乾淨的程式碼

作者|Adeel Imran譯者|無明 想寫出好程式碼,卻不知道從哪裡開始?想刪除死程式碼?想在程式碼庫中找出未被使用的變數?想在程式碼中找出有問題的模式? 你是多元化團隊的負責人嗎?你的團隊中有新來的開發人員嗎?你擔心他們會寫出不符合標準的程式碼嗎?在程式碼評審時是否花了一整天的時間去檢查程式碼標準,而

優質Java代碼的4個技巧

des 異步 sql follow 標識 java程序 管道 相同id 抽象 我們平時的編程任務不外乎就是將相同的技術套件應用到不同的項目中去,對於大多數情況來說,這些技術都是可以滿足目標的。然而,有的項目可能需要用到一些特別的技術,因此工程師們得深入研究,去尋找那些最簡單

程式設計師如何才能優秀的程式碼

1、寫每個程式都是為了解決某個問題,你應該去思考我該怎樣去解決這問題,而不是急於 的去考慮我程式到底怎麼寫、怎麼去實現,往往有些同學他動手最快,寫得很積極,但他不 一定是寫的最好的,也不一定是最快寫出程式的人。所以當你遇到問題的時候,你需要不斷 的去思考,去想我怎樣去解決這問

C/C++之高質量程式碼

      自從看了林銳博士的《高質量C++程式設計指南》以後,感覺自己以前寫的程式碼都是一些垃圾,真的low,根本不知道一些基本的程式設計規範,然後看了一些大神寫的程式碼,清晰易懂,而且還很漂亮,給人一種賞心悅目的感覺,寫一手高質量的程式碼,是一個程式設計師最基本的素養,

如何好的程式碼

設計 1、優雅需要付出代價。從短期利益來看,對某個問題提出優雅的解決方法,似乎可能花你更多的時間。但當它終於能夠正確執行並可輕易套用於新案例中,不需要花上數以時計,甚至以天計或以月計的辛苦代價時,你會看得到先前所花功夫的回報(即使沒有人可以衡量這一點)。這不僅給你一個可

在IDEA中使用自己好的Java程式碼

之前在Idea中用Java寫了一個包,叫MyDataStructures,包含了一些自己寫的資料結構的實現方法,在之後的工程MyAlgorithms中想要用到自己的資料結構,那麼如何做呢?網上查的結合自

只用這 6 個字元,就可以任意 JavaScript 程式碼

你可能在網上見過有人用 幾個不同的字元寫的各種稀奇古怪的 JavaScript 程式碼,雖然看起來奇怪,但是能正常執行!比如這個: (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]] 你猜執行結果是什麼?你可以

都2020年了,你還不會簡潔的Java程式碼

# 都2020年了,你還不會寫簡潔的Java程式碼! ## 使用Google Guava依賴 ```xml com.google.guava guava 29.0-jre ``` ## 建立一個list集合並賦值 最原始的辦法: ```java List stringList =

Java 11正式釋出,這8個逆天新特性教你更牛逼的程式碼

美國時間09月25日,Oralce正式釋出了Java 11,這是據Java 8以後支援的首個長期版本。 為什麼說是長期版本,看下面的官方釋出的支援路線圖表。 圖片 可以看Java 8擴充套件支援到2025年,而Java 11擴充套件支援到2026年。 現在大部分都在用Java

Java 11 正式釋出,這 8 個逆天新特性教你更牛逼的程式碼

點選上方“程式人生”,選擇“置頂公眾號”第一時間關注程式猿(媛)身邊的故事作者R哥已獲原作者授權

怎樣高效能的 Java 程式碼

在這篇文章中,我們將討論幾個有助於提升Java應用程式效能的方法。我們首先將介紹如何定義可度量的效能指標,然後看看有哪些工具可以用來度量和監控應用程式效能,以及確定性能瓶頸。 我們還將看到一些常見的Java程式碼優化方法以及最佳編碼實踐。最後,我們將看看用於提升Java應用程式效能的JVM調優技巧和架構調整

Java 11正式釋出,這幾個逆天新特性教你更牛逼的程式碼

   1就在前段時間,Oracle 官方宣佈 Java 11 (18.9 LTS) 正式釋出,可在生產環境中使用! 這無疑對我們來說是一大好的訊息。作為一名java開發者來說,雖然又要去學習和了解java11,但內心還是欣慰的。我想至少你和我一樣的心情:Java在手,天