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