eclipse 保持程式碼乾淨

Coding-lover發表於2016-05-23

編寫乾淨程式碼有助於其他開發人員閱讀、理解和維護您編寫的程式碼。但是,並不是所有人都贊成 “漂亮”、“精密” 或 “乾淨” 等定義。不同的開發人員擁有不同的風格和審美鑑賞力。到現在為止,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,將彈出編輯所有這些設定的對話方塊。

下面將討論可用的設定及其優缺點。由於許多設定可以風格各異,因此將不提供任何推薦。注意,如果不選擇具體選項,您的程式碼將保持鍵入時的樣子。

第一個選項卡用於處理編碼樣式並定義應當如何顯示塊、表示式和變數宣告。

Control statements
選擇 Use blocks in ifwhilefor, 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 等其他語言也會十分有用。社群會如何採用這一特性?它的發展方向會是怎樣呢?我想這些都會是十分有趣的。


轉載自:使用 Eclipse V3.3 保持程式碼乾淨

相關文章