使用 Eclipse V3.3 保持代碼干凈
http://java.chinaitlab.com/Eclipse/727690_2.html
干凈、易于閱讀的代碼可以使不熟悉程序的開發(fā)人員快速完整地理解程序,從而使軟件維護(hù)比其他方法更加有效。了解 Eclipse V3.3 中的新清理功能,Eclipse V3.3 比早期版本為開發(fā)人員提供了更多選項(xiàng)進(jìn)行清理。
編寫干凈代碼有助于其他開發(fā)人員閱讀、理解和維護(hù)您編寫的代碼。但是,并不是所有人都贊成 “漂亮”、“精密” 或 “干凈” 等定義。不同的開發(fā)人員擁有不同的風(fēng)格和審美鑒賞力。到現(xiàn)在為止,Eclipse 通過少量修飾以一種簡(jiǎn)單的功能方式設(shè)定了導(dǎo)入代碼的格式。Eclipse V3.3 中對(duì)這些操作進(jìn)行了擴(kuò)展,從而提供了更寬泛的清理功能級(jí)別。Eclipse V3.3 允許您清除代碼、添加缺少的代碼并應(yīng)用某種編碼樣式。向?qū)椭渲们謇碓O(shè)置并將其存儲(chǔ)起來以供稍后使用。
我們將討論清理的基本概念并提供有助于保持代碼干凈的工具的概覽。
用配置文件管理清理配置
某個(gè)具體的清理配置被稱為一個(gè) 配置文件。配置文件可以保存,這樣您就可以將設(shè)置提供給其他人或把來自早期項(xiàng)目和其他人的設(shè)置應(yīng)用到當(dāng)前代碼中。根據(jù)組織的編碼約定,配置文件可以應(yīng)用于所有的 Eclipse 項(xiàng)目,這樣便可以在所有開發(fā)團(tuán)隊(duì)中獲得相同的代碼樣式。
Eclipse 首選項(xiàng)為配置文件提供了管理功能。配置文件可被創(chuàng)建、編輯和刪除。您可以指定在工作區(qū)中全局使用的配置文件。當(dāng)您第一次打開工作區(qū)首選項(xiàng)并瀏覽到 Java > Code Style > Clean Up 時(shí),您將看到活動(dòng)配置文件 Eclipse [built-in]。此內(nèi)置配置文件已經(jīng)過預(yù)先配置并且是隨 Eclipse 一起交付的。內(nèi)置配置文件有兩個(gè):Eclipse 和 Save Participant。這兩個(gè)配置文件定義了兩個(gè)最小限度的清理配置,可基本上刪除不必要代碼。您可以通過將它們?cè)O(shè)為活動(dòng)配置文件來查看這些內(nèi)置配置文件的設(shè)置。所有詳細(xì)信息如詳細(xì)信息區(qū)域所示。
圖 1. 內(nèi)置的詳細(xì)信息
現(xiàn)有配置文件可作為各類模板使用,并且可以擴(kuò)展和定制這些模板。因此,從下拉式菜單中選擇現(xiàn)有配置文件作為活動(dòng)配置文件并單擊 edit。內(nèi)置配置文件不能更改。可以使用內(nèi)置配置文件作為您自己的配置文件的基礎(chǔ)或簡(jiǎn)單地將內(nèi)置配置文件按原樣應(yīng)用到代碼中。
要?jiǎng)?chuàng)建您自己的配置文件,請(qǐng)單擊 New。為配置文件命名并從下拉式菜單中選擇現(xiàn)有配置文件進(jìn)行初始化。取消選中 Open the edit dialog now 并單擊 OK。
圖 2. 新建配置文件
要共享配置文件,請(qǐng)使用導(dǎo)出功能。要打開配置文件,請(qǐng)單擊 Edit,然后單擊 Export。為配置文件命名,然后單擊 OK,接下來就可以共享配置文件了。
圖 3. 導(dǎo)出配置文件
要將 XML 文件中的外部配置應(yīng)用到項(xiàng)目中,必須先將其導(dǎo)入。在主清理首選項(xiàng)中單擊 Import,選擇文件,然后單擊 OK。
清理類型
清理設(shè)置分為五個(gè)主要類別。每個(gè)類別都顯示在相應(yīng)選項(xiàng)卡中,選項(xiàng)卡由設(shè)置部分和預(yù)覽部分構(gòu)成。預(yù)覽用于立即顯示設(shè)置對(duì)代碼的影響。嘗試使用這些設(shè)置并觀察預(yù)覽中的代碼發(fā)生怎樣的變化,以了解每種更改將怎樣影響您的代碼。當(dāng)您在主清理首選項(xiàng)中單擊 Edit,或在創(chuàng)建新配置文件時(shí)選擇 Open the edit dialog now,將彈出編輯所有這些設(shè)置的對(duì)話框。
下面將討論可用的設(shè)置及其優(yōu)缺點(diǎn)。由于許多設(shè)置可以風(fēng)格各異,因此將不提供任何推薦。注意,如果不選擇具體選項(xiàng),您的代碼將保持鍵入時(shí)的樣子。
Code Style
第一個(gè)選項(xiàng)卡用于處理編碼樣式并定義應(yīng)當(dāng)如何顯示塊、表達(dá)式和變量聲明。
Control statements
選擇 Use blocks in if
, while
, for
, and do
statements 可定義使用大括號(hào)的位置。大括號(hào)有助于提高代碼可讀性。使用大括號(hào)時(shí)更易于看出哪些內(nèi)容屬于同一個(gè)單元。在添加屬于 if
或 else
條件的另一條語句時(shí),還可以幫助避免錯(cuò)誤。另一方面,大括號(hào)太多會(huì)使代碼變得臃腫并可能使代碼難于處理。
選擇 Convert for loops to enhanced 將使用 for 循環(huán)符號(hào),這是由 Java™ V5.0 引入的,用于減少代碼。注意,此轉(zhuǎn)換不具有向后兼容性。
Expressions
選擇 Use parentheses around conditions 可定義使用圓括號(hào)的位置。對(duì)于圓括號(hào),請(qǐng)參閱以上關(guān)于大括號(hào)的討論。
Variable declarations
選擇 Use modifier 'final' where possible 可定義使用 final
關(guān)鍵字的位置。final
修飾符不但可用于聲明不能更改的變量,而且還是強(qiáng)制永遠(yuǎn)設(shè)定私有字段的優(yōu)秀選擇。final
修飾符對(duì)于性能、健壯性和正確性至關(guān)重要。
圖 4. 編碼樣式
Member Accesses
第二個(gè)選項(xiàng)卡允許您定義應(yīng)當(dāng)怎樣訪問類型成員。
Non static accesses
需要使用 this
限定詞訪問字段或方法時(shí)選中該選項(xiàng)。this
限定詞幫助您快速查看哪些字段或方法是正在編寫的當(dāng)前類的成員。它可以幫助您區(qū)分使用同一名稱的字段和局部變量。
Static accesses
使用復(fù)選框來定義限定設(shè)置。可以通過聲明類限定靜態(tài)成員訪問以更好地識(shí)別定義該成員的類型。另一方面,長(zhǎng)類名可能使簡(jiǎn)單的成員訪問變得臃腫并且使成員訪問看上去不具有可讀性或跨度多行代碼。
圖 5. 成員訪問
Unnecessary Code
第三個(gè)選項(xiàng)卡允許您為刪除未使用的代碼和多余代碼指定設(shè)置。
Unused code
使用第一個(gè)復(fù)選框可以刪除未使用的導(dǎo)入。如果不使用 Organize imports 或 Strg+Shift+o 組合鍵,則這樣自動(dòng)刪除不使用的導(dǎo)入將幫助您使項(xiàng)目保持盡可能地小且沒有任何未使用的庫。
使用第二個(gè)復(fù)選框可以刪除未使用的私有成員。私有成員只能在保存類中訪問。如果不使用私有成員,則不需要它們。私有成員只會(huì)增加編譯器的開銷。重構(gòu)代碼后如果擁有大量未使用的遺留代碼,則刪除會(huì)十分高效。另一方面,這樣做會(huì)十分危險(xiǎn)。假定您在設(shè)計(jì)尚未使用但可能在將來使用的新方法的原型。此清理選項(xiàng)如果處于激活狀態(tài)將刪除這些方法,并且可能會(huì)錯(cuò)過重要的工作。
Unnecessary code
使用第一個(gè)復(fù)選框來刪除多余代碼。多余代碼的存在會(huì)導(dǎo)致運(yùn)行時(shí)的額外開銷,這取決于您使用的編譯器。
使用第二個(gè)復(fù)選框可以去掉多余的 $NON-NLS$
標(biāo)記。這些標(biāo)記僅由 Eclipse 使用來識(shí)別不應(yīng)當(dāng)具體化的字符串。
圖 6. 多余代碼
Missing Code
第四個(gè)選項(xiàng)卡允許您添加缺少代碼。
Annotations
定義要將哪些注釋添加到代碼中。因?yàn)楫?dāng)使用不贊成使用的方法或者覆蓋已標(biāo)記方法未能正確覆蓋某一個(gè)超類中的方法時(shí),Java V5.0 @Override
或 @Deprecated
注釋將幫助編譯器生成錯(cuò)誤。注意,這些注釋不具有向后兼容性。
Potential programming problems
如果需要添加序列版本 ID,則定義此設(shè)置。對(duì)于實(shí)現(xiàn) Serializable
接口的類,建議這些類使用私有靜態(tài) final 變量定義一個(gè)序列版本 UID。此變量可以自動(dòng)生成。它用于在反序列化過程中檢查兼容性。
圖 7. 缺失的代碼
Code Organizing
第五個(gè)選項(xiàng)卡雖然位于最后但不可忽略其重要性,它用于幫助您組織代碼。
Formatter
定義在代碼清理內(nèi)是否應(yīng)當(dāng)使用格式程序。查閱格式程序首選項(xiàng):Preferences > Java > Code Style > Formatter。
Imports
定義是否應(yīng)當(dāng)使用 Organize Imports。查閱組織導(dǎo)入首選項(xiàng):Preferences > Java > Code Style > Organize Imports。
Members
定義是否需要按字母序把成員分類。有時(shí),將成員按字母序分類非常好可以更好地瀏覽代碼。不過,也可能有人會(huì)反對(duì)這樣做。假定您將組織您的代碼,使彼此調(diào)用的方法靠近放置在一起以便于進(jìn)行代碼瀏覽。排序可能會(huì)重新組織這些方法,并且它們可能不是所需的順序。概覽視圖提供了一項(xiàng)優(yōu)秀的功能用于給視圖中的成員排序,但是不能給代碼中的成員排序。具體配置和給成員排序的方法可以在 Preferences > Java > Appearance > Members Sort Order 中找到。
圖 8. 代碼組織
如何應(yīng)用配置文件
在創(chuàng)建了清理配置文件后,可以通過多種方法將其應(yīng)用到代碼中。最簡(jiǎn)單的方法是在 Java 編輯器中打開上下文菜單并選擇 Source > Clean Up。
圖 9. 打開清理向?qū)?/strong>
此操作將打開清理向?qū)В缦滤荆?/p>
圖 10. 清理向?qū)?/strong>
向?qū)⒁龑?dǎo)您完成清理選定源代碼的過程。左上的描述將顯示將被清理的項(xiàng)目及編譯單元的數(shù)目。通常,我們會(huì)將已配置的配置文件應(yīng)用到編譯單元中。但是,可以在應(yīng)用代碼清理之前先進(jìn)行自定義。如果需要查看某個(gè)設(shè)置影響代碼的結(jié)果,這可能十分有幫助。
只要任何 Java 項(xiàng)目、軟件包或 Java 文件至少包含一個(gè)編譯單元,清理向?qū)Ь涂梢栽谄渲袉?dòng)。例如,您可以選擇工作區(qū)中的所有 Java 項(xiàng)目并啟動(dòng)向?qū)А?zhí)行清理將影響工作區(qū)中可以用選定配置文件重構(gòu)的所有編譯單元。
默認(rèn)情況下,有一個(gè)用于整個(gè)工作區(qū)的全局清理配置文件。但是,也可以在項(xiàng)目屬性中啟用特定于項(xiàng)目的清理。每個(gè)項(xiàng)目都可以有自己的清理配置文件。要啟用這種清理操作,只需打開項(xiàng)目屬性并瀏覽到 Java Code Style > Clean Up,如下所示:
圖 11. 應(yīng)用配置文件
要預(yù)覽清理結(jié)果,請(qǐng)?jiān)谇謇硐驅(qū)е袉螕?Next。這時(shí)向?qū)⒂?jì)算代碼更改數(shù)目。根據(jù)選定的編譯單元數(shù)目,完成此過程可能需要花費(fèi)一段時(shí)間。在下一個(gè)頁面中,將為您呈現(xiàn)將要應(yīng)用的更改。
圖 12. 預(yù)覽結(jié)果
該樹列出了將受清理影響的所有編譯單元。您可以進(jìn)入到樹中去選擇編譯單元的不同更改。選擇更改將在比較視圖中顯示初始源代碼和經(jīng)過重構(gòu)的源代碼。在查看了更改后,您可能不希望應(yīng)用所有更改。在這種情況下,您可以簡(jiǎn)單地取消選中不必執(zhí)行的更改。單擊 Finish 將執(zhí)行整個(gè)清理操作。
注意事項(xiàng)
諸如 Convert for loops to enhanced 或 Add missing annotations 之類的某些清理重構(gòu)操作是與 Java 代碼依從性 5.0 或 6.0 綁定的,并且僅當(dāng)源代碼是根據(jù)要求的 Java 版本編譯的才能應(yīng)用。清理向?qū)г试S您選擇那些重構(gòu)選項(xiàng),而不論使用的是哪一個(gè) Java 版本。因此如果您想知道沒有轉(zhuǎn)換 for
循環(huán)或者未能正確注釋掉不贊成使用的方法的原因,請(qǐng)?jiān)?Preferences > Java > Compiler 下查看工作區(qū)或項(xiàng)目的編譯器依從級(jí)別。
在多次運(yùn)行清理向?qū)Р⑶遗渲梦募呀?jīng)正確設(shè)置后,您可能不希望每次執(zhí)行清理操作時(shí)都在向?qū)е卸啻芜M(jìn)行單擊。在這種情況下,您只需在 Preferences > Java > Code Style > Clean Up 下的配置文件設(shè)置頁面中禁用向?qū)А?/p>
圖 13. 隱藏/顯示清理向?qū)?/strong>
在各種資源上執(zhí)行代碼清理通常會(huì)導(dǎo)致很多更改。向?qū)г试S您在應(yīng)用之前預(yù)覽那些更改。但是,如果數(shù)百計(jì)文件都受到影響則會(huì)使預(yù)覽不方便,尤其是當(dāng)您需要在預(yù)覽過程中查找某個(gè)更改時(shí)。使用過濾器選項(xiàng)可以縮小預(yù)覽頁面中顯示的更改列表。通常,幾乎所有文件都會(huì)受到源代碼格式操作的影響,但是添加缺失的不贊成注釋影響的文件卻不多。在這種情況下,過濾器將通過過濾其他更改來幫助您找到那些文件。過濾器位于預(yù)覽頁面的右上角。
圖 14. 應(yīng)用過濾器
清理操作不但可以手動(dòng)執(zhí)行,而且還可以在執(zhí)行 Java 文件的保存操作期間執(zhí)行。要啟用此功能,請(qǐng)轉(zhuǎn)到 Window > Preferences > Java > Editor > Save Actions 并選擇附加操作。請(qǐng)按前述配置清理操作,然后就會(huì)在每次保存 Java 文件時(shí)都執(zhí)行這些清理操作。請(qǐng)注意,執(zhí)行那些操作有時(shí)會(huì)加大開銷并且降低工作臺(tái)的速度。同時(shí),如果沒有想到清理操作,您可能會(huì)在保存剛剛編寫的代碼后覺得很困惑為什么代碼不太一樣。
圖 15. 保存時(shí)執(zhí)行清理
結(jié)束語
清理是一個(gè)極具實(shí)用性的工具,它可以使您的代碼看上去更舒服并且易于其他人快速理解代碼。它甚至可能使代碼更健壯。但是,編碼樣式可以風(fēng)格各異。例如,過去避免使用過多引號(hào)的程序員現(xiàn)在不需要在任何可能的位置使用代碼塊,就是因?yàn)榍謇硐驅(qū)峁┝嗽摬僮鳌?/p>
清理不能解決概念問題或功能問題 —— 至少用當(dāng)前版本的 Eclipse 還無法完成。但是以清晰的方式顯示代碼可以省去很多工作。向?qū)Ц綆У牟僮魇重S富,并且涵蓋了編碼樣式和約定的多個(gè)要點(diǎn)。各個(gè)組織必須確定自己的樣式和約定,因此,如果能對(duì)向?qū)нM(jìn)行擴(kuò)展將十分有幫助,這在 Eclipse V3.3 中還未實(shí)現(xiàn)。清理概念不但在 Java 世界中十分有意義,而且對(duì)于 C/C++、PHP、Python、Perl 等其他語言也會(huì)十分有用。社區(qū)會(huì)如何采用這一特性?它的發(fā)展方向會(huì)是怎樣呢?我想這些都會(huì)是十分有趣的。
參考資料
學(xué)習(xí)
您可以參閱本文在 developerWorks 全球站點(diǎn)上的 英文原文。
查閱 “Eclipse 推薦讀物列表”。
Eclipse 新用戶應(yīng)當(dāng)查閱 Eclipse 項(xiàng)目資源的新手入門。
查閱 IBM developerWorks 的 Eclipse 項(xiàng)目資源 擴(kuò)展 Eclipse 技巧。
要收聽針對(duì)軟件開發(fā)人員的有趣訪談和討論,一定要訪問 developerWorks podcast。
要獲得關(guān)于 Eclipse 平臺(tái)的介紹性文章,請(qǐng)參閱 “Eclipse 平臺(tái)入門”。
隨時(shí)關(guān)注 developerWorks 的 技術(shù)事件和網(wǎng)絡(luò)廣播。
查看免費(fèi)的 developerWorks On demand demo 觀看并了解 IBM 及開源技術(shù)和產(chǎn)品功能。
查閱最近將在全球舉辦的面向 IBM 開放源碼開發(fā)人員的研討會(huì)、交易展覽、網(wǎng)絡(luò)廣播和其他 活動(dòng)。
訪問 developerWorks 開放源碼專區(qū),獲得豐富的 how-to 信息、工具和項(xiàng)目更新,幫助您用開放源碼技術(shù)進(jìn)行開發(fā),并與 IBM 產(chǎn)品結(jié)合使用。
獲得產(chǎn)品和技術(shù)
在 IBM alphaWorks 中查閱最新的 Eclipse 技術(shù)下載。
從 Eclipse Foundation 下載 Eclipse Platform 及其他項(xiàng)目。
下載 IBM 產(chǎn)品評(píng)估版本,并開始使用 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的應(yīng)用程序開發(fā)工具和中間件產(chǎn)品。
使用 IBM 試用軟件 改進(jìn)您的下一個(gè)開發(fā)項(xiàng)目,這些軟件可以通過下載或從 DVD 中獲得。
討論
Eclipse Platform 新聞組 應(yīng)當(dāng)是討論關(guān)于 Eclipse 的問題的第一站(選擇此鏈接將啟動(dòng)默認(rèn)的 Usenet 新聞閱讀器應(yīng)用程序并打開 eclipse.platform)。
Eclipse 新聞組 中有很多參考資料適用于對(duì)使用和擴(kuò)展 Eclipse 感興趣的人員。
參與 developerWorks blogs 并加入 developerWorks 社區(qū)。<
作者簡(jiǎn)介
 |

|
 |
Katrin Limpoeck 是德國(guó) Boeblingen 的 IBM 開發(fā)實(shí)驗(yàn)室的軟件工程師。她擁有帕桑 (Passau) 大學(xué)的計(jì)算機(jī)科學(xué)碩士學(xué)位。在 2006 年加入 IBM 德國(guó)之前,她參與了多個(gè)軟件工程項(xiàng)目。她所感興趣的領(lǐng)域包括業(yè)務(wù)流程管理、面向服務(wù)的架構(gòu)、Java 開發(fā)和 Eclipse。
|
 |

|
 |
Philipp Tiedt 是德國(guó) Boeblingen 的 IBM 開發(fā)實(shí)驗(yàn)室的軟件工程師。他從 Open University 獲得了計(jì)算機(jī)科學(xué)的學(xué)士學(xué)位。在 2004 年加入 IBM 德國(guó)公司之前,他在紐約 Hawthorne 的 IBM T.J. Watson Research Center 完成了畢業(yè)設(shè)計(jì)。他感興趣的領(lǐng)域是 Eclipse、用戶界面設(shè)計(jì)、Java 技術(shù)和面向服務(wù)的架構(gòu)。
|