歷史
可能第一個摺疊編輯器是用於IBM 370大型機的1974結構化編程工具(SPF)編輯器,它可以根據縮進隱藏線條。 它顯示在字元映射的3270終端上它對像COBOL這樣的冗長語言非常有用。 它演變為互動式系統生產力設施(ISPF)。
套用
代碼摺疊具有各種使用模式,主要是組織代碼或隱藏較少有用的信息,因此可以專注於更重要的信息。 常見的模式如下。
列提綱
最基本的是,應用程式使用代碼摺疊來概述原始碼,將每個塊摺疊為單行。 這可以只是函式和類之類的頂級塊,嵌套函式和方法之類的嵌套塊,或者所有塊,特別是控制流塊。 這使得人們可以獲得代碼概覽,輕鬆導航和重新排列代碼,並根據需要深入了解更多細節,而不會被其他代碼分散注意力。 從視角來看,這允許人們快速查看所有函式的列表(沒有他們的身體),而導航方式則取代了長期函式的廣泛分頁 - 或者搜尋目標 - 直接轉到下一個函式。
隱藏樣板代碼
某些語言或庫需要大量的樣板代碼。 這導致代碼非常長,這可能會掩蓋主要觀點。 此外,實用代碼可能會在樣板中丟失。
例如,在
Java中,具有getter和setter的單個私有欄位至少需要3行,如果每個欄位位於單獨的行上:
private String name = null;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
這擴展到10行,傳統的功能斷行和功能之間的間距(包括尾隨換行):
private String name = null;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
使用Javadoc的文檔將其擴展為20行:
/**
* Property <code>name</code> readable/writable.
*/
private String name = null;
/**
* Getter for property <code>name</code>
*/
public String getName() {
return name;
}
/**
* Setter for property <code>name</code>.
* @param name
*/
public void setName(String name) {
this.name = name;
}
如果有很多這樣的欄位,結果很容易就是數百行代碼而且“有趣”內容很少 - 代碼摺疊可以將每個欄位減少到一行,甚至可以減少所有欄位的單行。 此外,如果所有例程欄位都被摺疊,但非常規欄位(其中getter或setter不僅僅是返回或分配私有欄位)沒有摺疊,則更容易看到實質性代碼。
摺疊元數據
元數據可能很長,並且通常不如它描述的數據重要。 摺疊元數據允許主要關注數據,而不是元數據。
在結構化編程中顯示結構或三明治代碼
結構化編程由嵌套的代碼塊組成,長代碼塊(如長切換語句)可能會掩蓋整體結構。 代碼摺疊允許人們看到整體結構並擴展到特定級別。 此外,在某些用途中,特別是嚴格的結構化編程(單功能退出),在查看擴展代碼時很難看到代碼模式。 例如,在結構化編程中的資源管理中,通常獲取資源,然後使用資源獲取代碼塊,最後獲取釋放資源。 如果中間存在長代碼塊,則很難看到獲取/釋放配對,但很容易看出插入的塊是否被摺疊。 類似地,在條件代碼中,如if ... then ... else,輔助塊可能遠離條件語句。
分組代碼
摺疊組可用於對代碼進行分組,可以通過顯式分組 - 類似於將模組分成多個部分的注釋塊,或者將類成員分成關聯的組 - 或隱式地,例如通過按訪問級別自動對類成員進行分組。
隱藏遺留代碼
遺留代碼或者開發人員不希望在給定時間點查看或更改的任何代碼 -可以摺疊起來,以便程式設計師可以專注於所考慮的代碼。
摺疊代碼的四種方式
動作或命令 | 效果 |
焦點列上的收起按鈕 | 收起高亮顯示的代碼塊 |
View |Code Folding |Fold | 收起包含當前所選文本的代碼塊 |
View |Code Folding |Fold Methods/Functions | 收起每個方法或函式最外層的代碼塊 |
View |Code Folding|Fold Comment Blocks | 收起所有的多行注釋 |