使用 Eclipse V3.3 保持代碼乾淨

級別: 初級

Katrin Limpoeck ([email protected]), 軟件工程師, IBM
Philipp Tiedt ([email protected]), 軟件工程師, IBM 

2007 年 7 月 30 日

乾淨、易於閱讀的代碼可以使不熟悉程序的開發人員快速完整地理解程序,從而使軟件維護比其他方法更加有效。瞭解 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 可定義使用大括號的位置。大括號有助於提高代碼可讀性。使用大括號時更易於看出哪些內容屬於同一個單元。在添加屬於 ifelse 條件的另一條語句時,還可以幫助避免錯誤。另一方面,大括號太多會使代碼變得臃腫並可能使代碼難於處理。

選擇 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 importsStrg+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 enhancedAdd 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 等其他語言也會十分有用。社區會如何採用這一特性?它的發展方向會是怎樣呢?我想這些都會是十分有趣的。

參考資料

學習

討論
  • Eclipse Platform 新聞組 應當是討論關於 Eclipse 的問題的第一站(選擇此鏈接將啓動默認的 Usenet 新聞閱讀器應用程序並打開 eclipse.platform)。

  • Eclipse 新聞組 中有很多參考資料適用於對使用和擴展 Eclipse 感興趣的人員。

  • 參與 developerWorks blogs 並加入 developerWorks 社區。

作者簡介


Katrin Limpoeck

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 技術和麪向服務的架構。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章