源:https://blog.ximinghui.org/30dd840e/index.html
有時候一個代碼源文件中內容過多時,我們可能想要對其進行分區,比如我想要將我的實體類分為 字段 、 行為 、 規則校驗 、 創建方法 四個部分或分區。
但是,我該怎麼告訴我的
NetBeans(劃掉)
Eclipse(劃掉)
IntelliJ IDEA 並讓它知道我的意思呢?
一般開發者可能會用一些比常規代碼註釋稍微醒目的方式標記一下代碼,比如:
public class User {
// ======================== 字段 ========================
private final UserId id;
private UserProfile userProfile;
private String password;
private UserType userType;
private final ZonedDateTime creationTime;
private ZonedDateTime lastLoginTime;
private Boolean enabled;
// 省略私有全參構造器
// ======================== 行為 ========================
public UserId getId() {
return id;
}
public UserProfile getUserProfile() {
return userProfile;
}
public void updateEmail(String newEmail) {
userProfile = userProfile.withEmail(newEmail);
}
public void updateFullName(PersonName newFullName) {
userProfile = userProfile.withFullName(newFullName);
}
public String getPassword() {
return password;
}
public UserType getUserType() {
return userType;
}
// ======================== 創建方法 ========================
// 省略工廠方法
}
或者這樣的:
//////////////////////////// 校驗相關 ////////////////////////////
這樣的:
/////////////////////////////////////////////////////////////////
// 校驗相關 //
/////////////////////////////////////////////////////////////////
這樣的:
// ##############################################################
// # 校驗相關 #
// ##############################################################
甚至是這樣的:
/*
* ┏┓ ┏┓
* ┏┛┻━━━┛┻┓
* ┃ ┃
* ┃ ━ ┃
* ┃ ┳┛ ┗┳ ┃
* ┃ ┃
* ┃ ┻ ┃
* ┃ ┃
* ┗━┓ ┏━┛
* ┃ ┃ 從這裏開始,以下就是校驗代碼啦~
* ┃ ┃
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
*/
但是,朋友們有沒有發現,無論設計的多麼獨特,無論自己玩的多嗨,IDE都不鳥你,再花哨對於IDE來説也只是普通的代碼註釋罷了。
那有沒有一種辦法能讓IDE提供一種支持呢?比如能夠識別出來我想要標記的這一塊代碼區域?
聰明的小夥伴一定猜到了,那必須得有啊!不然也不會有我這篇文章了。
下面開始正文!!!
方式1:<editor-fold> 標記
<editor-fold> 標記最早是由一個名為 NetBeans 的 Java IDE 在 5.0 版本(大概2006年左右)中引入的,它被設計用於手動定義代碼摺疊區域。之後也被 Visual Studio Code、JetBrains系列 IDE軟件所支持。
注:Eclipse原生不支持這種標籤,需要安裝插件。
它的用法如下:
public class User {
//<editor-fold desc="字段">
private final UserId id;
private UserProfile userProfile;
private String password;
private UserType userType;
private final ZonedDateTime creationTime;
private ZonedDateTime lastLoginTime;
private Boolean enabled;
//</editor-fold>
}
用 <editor-fold> 標記在代碼區域的開始,並用 </editor-fold> 標記在代碼區域結束的位置。
這樣IDE就會識別到這個區域,提供點擊摺疊區域代碼的功能,desc屬性的描述文本將會在摺疊時顯示出來。以IntelliJ IDEA為例,有了這個標籤標記後,代碼前面就會出現一個可點擊的 “⌄” 控件,鼠標點擊後即可摺疊這塊區域的代碼。未摺疊和已摺疊的效果圖如下:
另外,該標籤還有defaultstate屬性,如果設置為collapsed值,則IDE會默認摺疊代碼,示範如:
<editor-fold defaultstate="collapsed" desc="字段"> 。不過這個屬性只有NetBeans支持,其它IDE均不支持這個特性。
方式2:region...endregion 標記
#region 和 #endregion 標記用於在代碼中定義可摺疊區域,最初在 C# 等語言中引入,隨後被多個集成開發環境(IDEs)採納,以增強代碼的可讀性和組織性。支持的IDE有Visual Studio、Visual Studio Code、JetBrains系列 。
注:Eclipse原生不支持這種標籤,需要安裝插件。NetBeans不支持這種標記。
兩種標記不同的是,<editor-fold> 是編輯器提供的支持,而 #region ... #endregion 是C#、Python等語言支持的語法,當然部分編輯器也提供支持。
#region ... #endregion的用法如下。
C#語言:
#region 這是區域名
void MyMethod() {
// 代碼略
}
#endregion
Python語言:
# region 這是區域名
def my_function():
# 代碼略
# endregion
Java語言不支持這中標記,但是一些主流的IDE支持,比如VScode和IntelliJ IDEA。
Java中的使用示範如下: