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

|
 |
Katrin Limpoeck 是德國 Boeblingen 的 IBM 開發實驗室的軟件工程師。她擁有帕桑 (Passau) 大學的計算機科學碩士學位。在 2006 年加入 IBM 德國之前,她參與了多個軟件工程項目。她所感興趣的領域包括業務流程管理、面向服務的架構、Java 開發和 Eclipse。
|
 |

|
 |
Philipp Tiedt 是德國 Boeblingen 的 IBM 開發實驗室的軟件工程師。他從 Open University 獲得了計算機科學的學士學位。在 2004 年加入 IBM 德國公司之前,他在紐約 Hawthorne 的 IBM T.J. Watson Research Center 完成了畢業設計。他感興趣的領域是 Eclipse、用戶界面設計、Java 技術和面向服務的架構。
|