Code falten – Wikipedia

Werkzeug der Redaktion für Programmierung, Skripterstellung und Markup

Code Folding Beispiel auf PHP mit vim.

Code falten ist eine Funktion einiger Texteditoren, Quellcode-Editoren und IDEs, mit der der Benutzer Abschnitte einer aktuell bearbeiteten Datei im Rahmen routinemäßiger Bearbeitungsvorgänge selektiv ausblenden und “falten” kann. Auf diese Weise kann der Benutzer große Textmengen verwalten und nur die Unterabschnitte des Texts anzeigen, die zu einem bestimmten Zeitpunkt spezifisch relevant sind.

Die Identifizierung von Falten kann automatisch erfolgen, meistens basierend auf der Syntax der betreffenden Computersprache, der Einrückung oder manuell, entweder basierend auf einem In-Band-Marker (als Teil des Quellcodes gespeichert) oder außerhalb des Bandes angegeben. nur innerhalb des Editors.

Viele Editoren bieten Offenlegungs-Widgets für das Falten von Code in einer Seitenleiste neben Zeilennummern an, die beispielsweise durch ein Dreieck angezeigt werden, das seitlich (wenn reduziert) oder nach unten (wenn erweitert) zeigt, oder durch a [-] Feld für reduzierbaren (erweiterten) Text und a [+] Feld für erweiterbaren (reduzierten) Text. Diese Funktion wird häufig von einigen Computerprogrammierern zum Verwalten von Quellcodedateien verwendet und wird auch häufig beim Datenvergleich verwendet, um nur den geänderten Text anzuzeigen.

Text falten ist eine ähnliche Funktion, die in Falzeditoren, Outlinern und einigen Textverarbeitungsprogrammen verwendet wird, wird jedoch für normalen Text verwendet und basiert, falls automatisch, auf der Syntax menschlicher Sprachen, insbesondere Absätzen oder Abschnittsebenen, anstelle der Syntax einer Computersprache. Eine andere Variante der Code-Faltung ist die “Datenfaltung”, die in einigen Hex-Editoren implementiert ist und zum Strukturieren einer Binärdatei oder zum Ausblenden unzugänglicher Datenabschnitte in einem RAM-Editor verwendet wird.[1] Es gibt verschiedene alternative Begriffe für solche Funktionen, einschließlich “Erweitern und Reduzieren”, “Ausblenden von Code” und “Gliederung”. In Microsoft Word wird die Funktion als “zusammenklappbare Gliederung” bezeichnet.

Geschichte[edit]

Das früheste bekannte Beispiel für das Falten von Code in einem Editor ist NLS (Computersystem).[2] Der wahrscheinlich erste weit verbreitete Falteditor war der SPF-Editor (Structured Programming Facility) von 1974 für IBM 370-Mainframes, mit dem Zeilen aufgrund ihrer Einrückung ausgeblendet werden konnten. Es wird auf 3270-Terminals mit Zeichenzuordnung angezeigt.[3] Es war sehr nützlich für Prolix-Sprachen wie COBOL. Es entwickelte sich zur Interactive System Productivity Facility (ISPF).

Das Falten von Code hat verschiedene Verwendungsmuster, hauptsächlich das Organisieren von Code oder das Ausblenden weniger nützlicher Informationen, damit man sich auf wichtigere Informationen konzentrieren kann. Es folgen gängige Muster.

Gliederung[edit]

Grundsätzlich verwenden Anwendungen die Code-Faltung, um den Quellcode zu skizzieren und jeden Block in einer einzigen Zeile zu reduzieren. Dies können nur Blöcke der obersten Ebene wie Funktionen und Klassen, verschachtelte Blöcke wie verschachtelte Funktionen und Methoden oder alle Blöcke sein, insbesondere Steuerflussblöcke. Auf diese Weise erhalten Sie einen Überblick über den Code, können ihn einfach navigieren und neu anordnen und bei Bedarf detailliertere Informationen erhalten, ohne von anderem Code abgelenkt zu werden. In Bezug auf die Anzeige können Sie schnell eine Liste aller Funktionen (ohne deren Körper) anzeigen, während dies in Bezug auf die Navigation ein umfangreiches Blättern nach langen Funktionen oder die Suche nach dem Ziel ersetzt, indem Sie direkt zur nächsten Funktion wechseln.

Boilerplate-Code ausblenden[edit]

Einige Sprachen oder Bibliotheken erfordern umfangreichen Code. Dies führt zu extrem langem Code, der den Hauptpunkt verdecken kann. Ferner kann inhaltlicher Code in der Kesselplatte verloren gehen.

In Java erfordert beispielsweise ein einzelnes privates Feld mit einem Getter und einem Setter mindestens 3 Zeilen, wenn sich jede in einer separaten Zeile befindet:

private String name = null;
public String getName() { return name; }
public void setName(String name) { this.name = name; }

Dies wird auf 10 Zeilen mit herkömmlichen Funktionszeilenumbrüchen und Abständen zwischen Funktionen (einschließlich nachfolgender Zeilenumbrüche) erweitert:

private String name = null;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

Die Dokumentation mit Javadoc erweitert dies auf 20 Zeilen:

/**
 * Property name  readable/writable.
 */
private String name = null;

/**
 * Getter for property name
 */
public String getName() {
    return name;
}

/**
 * Setter for property name.
 * @param name
 */
public void setName(String name) {
    this.name = name;
}

Wenn es viele solcher Felder gibt, kann das Ergebnis leicht Hunderte von Codezeilen mit sehr wenig “interessantem” Inhalt sein – das Falten von Code kann dies auf eine einzelne Zeile pro Feld oder sogar auf eine einzelne Zeile für alle Felder reduzieren. Wenn alle Routinefelder gefaltet sind, aber nicht routinemäßige Felder (bei denen Getter oder Setter nicht nur ein privates Feld zurückgeben oder zuweisen) nicht gefaltet werden, wird es einfacher, den inhaltlichen Code zu sehen.

Reduzieren von Metadaten[edit]

Metadaten können langwierig sein und sind im Allgemeinen weniger wichtig als die darin beschriebenen Daten. Durch das Reduzieren von Metadaten kann man sich hauptsächlich auf die Daten konzentrieren, nicht auf die Metadaten. Beispielsweise kann eine lange Liste von Attributen in C # wie folgt manuell reduziert werden:[5]

#region Attributes
[Browsable(false)]
[MergableProperty(false)]
[DefaultValue(null)]
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateContainer(typeof(MyType))]
[TemplateInstance(TemplateInstance.Single)] 
#endregion
public ITemplate ContentTemplate
{
    get { return _temp; }
    set { _temp = value; }
}

Der resultierende Code wird angezeigt als:

Attributes
public ITemplate ContentTemplate
{
    get { return _temp; }
    set { _temp = value; }
}

[edit]

Kommentare sind eine Form von lesbaren Metadaten, und lange Kommentare können den Codefluss stören. Dies kann entweder bei einem langen Kommentar für einen kurzen Codeabschnitt wie einem Absatz zur Erläuterung einer Zeile oder bei Kommentaren für Dokumentationsgeneratoren wie Javadoc oder der Fall sein XML-Dokumentation. Durch das Falten von Code kann man lange Kommentare haben, diese jedoch nur bei Bedarf anzeigen. In Fällen, in denen ein langer Kommentar eine einzelne Zusammenfassungszeile enthält, z. B. Python-Dokumentzeichenfolgen, kann die Zusammenfassung weiterhin angezeigt werden, wenn der Abschnitt reduziert wird, sodass eine Zusammenfassung / Detailansicht möglich ist.

Struktur- oder Sandwichcode in strukturierter Programmierung anzeigen[edit]

Strukturierte Programmierung besteht aus verschachtelten Codeblöcken, und lange Codeblöcke – wie lange switch-Anweisungen – können die Gesamtstruktur verdecken. Durch das Falten von Code kann man die Gesamtstruktur sehen und auf eine bestimmte Ebene erweitern. Darüber hinaus gibt es bei einigen Anwendungen, insbesondere bei der streng strukturierten Programmierung (Single Function Exit), Codemuster, die bei der Betrachtung von erweitertem Code schwer zu erkennen sind. Beispielsweise erwirbt man beim Ressourcenmanagement in der strukturierten Programmierung im Allgemeinen eine Ressource, gefolgt von einem Codeblock, der die Ressource verwendet, und schließt mit dem Freigeben der Ressource ab. Die Erfassung / Freigabe-Paarung ist schwer zu erkennen, ob sich dazwischen ein langer Codeblock befindet, aber leicht zu erkennen, ob der dazwischenliegende Block gefaltet ist. Ebenso im bedingten Code wie if...then...elseSekundärblöcke können weit von der Bedingungsanweisung entfernt sein.

Gruppierungscode[edit]

Faltgruppen können zum Gruppieren von Code verwendet werden, entweder durch explizite Gruppierung – ähnlich wie bei Kommentarblöcken, die ein Modul in Abschnitte unterteilen, oder durch Klassenmitglieder in zugeordnete Gruppen – oder implizit, beispielsweise durch automatische Gruppierung von Klassenmitgliedern nach Zugriffsebene.

Legacy-Code ausblenden[edit]

Legacy-Code – oder Code, den ein Entwickler zu einem bestimmten Zeitpunkt nicht anzeigen oder ändern möchte – kann weggeklappt werden, damit sich Programmierer auf den betreffenden Code konzentrieren können.

Ausblenden von Quelldatentabellen[edit]

Konventionen[edit]

Um das Falten von Code zu unterstützen, muss der Texteditor einen Mechanismus zum Identifizieren von “Faltpunkten” innerhalb einer Textdatei bereitstellen. Einige Texteditoren stellen diesen Mechanismus automatisch bereit, während andere Standardeinstellungen bereitstellen, die vom Benutzer entweder überschrieben oder erweitert werden können.

Es gibt verschiedene Mechanismen, die grob in automatisch und manuell unterteilt sind. Benötigen sie eine Spezifikation durch den Programmierer? Faltpunkte werden normalerweise mit einem oder mehreren der folgenden Mechanismen bestimmt. Jedes davon hat seine eigenen Vorteile und Schwierigkeiten, und es liegt im Wesentlichen an den Entwicklern, die die Texteditor-Software erstellen, zu entscheiden, welche implementiert werden soll. Mit Texteditoren, die mehrere Faltmechanismen unterstützen, kann der Benutzer normalerweise auswählen, welche für die zu bearbeitende Datei am besten geeignet ist.

Syntaxabhängig[edit]

Syntaxabhängige Faltpunkte sind solche, die vom Inhalt der zu bearbeitenden Datei abhängen, um anzugeben, wo bestimmte Faltbereiche beginnen und enden sollen. Syntaxbasierte Faltpunkte werden normalerweise um einige oder alle Standardunterfunktionen der verwendeten Markup- oder Programmiersprache definiert. Diese sind wünschenswert, da sie automatisch sind und mit der Codestruktur übereinstimmen. Die Implementierung erfordert jedoch möglicherweise erhebliche Arbeit und Zeit für die Berechnung beim Bearbeiten einer Datei.

Einrückungsbasiert[edit]

Einrückungsbasierte Faltpunkte werden im Allgemeinen durch die Position und Reihenfolge nicht druckbarer Leerzeichen wie Tabulatoren und Leerzeichen im Text angegeben. Dies wird am häufigsten als einfache Form der syntaxbasierten Faltung verwendet, da das Einrücken fast immer die Verschachtelungsebene in Einrückungsstilen für strukturierte Programmiersprachen widerspiegelt.

Diese Konvention eignet sich besonders für Syntaxen mit einer Abseitsregel, sodass die Struktur weitgehend mit dem Einzug übereinstimmt. Beispiele hierfür sind Python- und Textdateien, für die in der Regel ein Einzug erforderlich ist. Selbst in diesen Fällen stimmt die Struktur jedoch nicht genau mit dem Einzug überein, wie z. B. bei der Zeilenfortsetzung, und daher wird eine syntaxabhängige Faltung bevorzugt.

Token-basiert[edit]

Token-basierte Faltpunkte werden mit speziellen Trennzeichen angegeben, die im Text keinem anderen Zweck dienen als der Identifizierung der Grenzen von Faltpunkten. Diese Konvention kann mit einrückungsbasierten Faltpunkten verglichen werden, bei denen druckbare Zeichen anstelle von Leerzeichen verwendet werden. Die häufigsten Trennzeichen sind {{{ um den gefalteten Abschnitt zu beginnen, und }}} um es zu beenden.

Ein weiteres bemerkenswertes Zeichen ist #region ((C # -Richtlinien), beziehungsweise #Region ((Visual Basic-Anweisungen), verwendet im Microsoft Visual Studio Code Editor. Diese werden syntaktisch als Compiler-Direktiven behandelt, haben jedoch keinen Einfluss auf die Kompilierung.

Als manuelle Methode ermöglicht das tokenbasierte Falten die Diskretion bei der Gruppierung von Code anhand beliebiger Kriterien, z. B. “Funktionen für eine bestimmte Aufgabe”, die aus der syntaktischen Analyse nicht abgeleitet werden können.

Token-basiertes Falten erfordert In-Band-Signalisierung, wobei Falt-Token im Wesentlichen strukturierte Kommentare sind und im Gegensatz zu anderen Methoden im Quellcode vorhanden und für andere Programmierer sichtbar sind. Dies ermöglicht die gemeinsame Nutzung, erfordert jedoch auch ihre Verwendung (oder Aufbewahrung) durch alle Programmierer, die an einer bestimmten Datei arbeiten, und kann Reibungs- und Wartungsaufwand verursachen.

Benutzerdefiniert[edit]

Benutzerdefiniertes Falten ermöglicht dem Benutzer das Falten von Textabschnitten mithilfe einer generischen Auswahlmethode, ohne jedoch den Quellcode (außerhalb des Bandes) zu ändern, sondern nur im Editor. Beispielsweise kann ein Programmierer einige Textzeilen auswählen und festlegen, dass sie gefaltet werden sollen. Gefalteter Text kann anonym oder benannt sein und über Bearbeitungssitzungen hinweg beibehalten oder verworfen werden. Im Gegensatz zum tokenbasierten Falten ändert dies den Quelltext nicht – es wird daher nicht mit anderen Editoren der Datei geteilt und ist im Code nicht sichtbar.

Beispiele[edit]

Das folgende Dokument enthält Faltmarken ({{{ ... }}}):

 Heading 1
 {{{
 Body
 }}}

 Heading 2
 {{{
 Body
 }}}

 Heading 3
 {{{
 Body
 }}}

Beim Laden in einen Falteditor wird die Umrissstruktur angezeigt:

 Heading 1
 {{{ ...

 Heading 2
 {{{ ...

 Heading 3
 {{{ ...

Normalerweise klicken Sie auf die {{{ Markierungen lassen den entsprechenden Text erscheinen.

Software mit Code-Faltfunktion[edit]

Einer der frühesten Folding-Editoren war STET, ein Editor, der 1977 von Mike Cowlishaw für das VM / CMS-Betriebssystem geschrieben wurde. STET ist ein Texteditor (für Dokumentation, Programme usw.), der Dateien auf der Basis von Zeilenblöcken faltet. Jeder Zeilenblock kann gefaltet und durch eine Namenszeile ersetzt werden (die wiederum Teil eines Blocks sein kann, der dann selbst gefaltet werden kann).

In der Occam-IDE wurde ein Falteditor angezeigt zirka 1983, genannt Inmos Transputer Development System (TDS)[6],.[7] Der “f” -Editor (in der Liste unten) ist wahrscheinlich das intakteste Erbe dieser Arbeit.

Der Macintosh-Computer hatte in der Vergangenheit eine Reihe von Quellcode-Editoren, die Teile des Codes über “Offenlegungsdreiecke” “falteten”. Das UserLand-Softwareprodukt Frontier ist eine Skriptumgebung mit dieser Funktion.[8]

Das Falten wird von vielen modernen Texteditoren bereitgestellt, und das syntaxbasierte oder semantikbasierte Falten ist heute Bestandteil vieler Softwareentwicklungsumgebungen. Zu den Herausgebern gehören:

Andere Redakteure[edit]

  1. ^ http://flight-manual.atom.io/using-atom/sections/folding/
  2. ^ Token-basiertes Falten wird von der implementiert falten Nebenmodus. Man kann auch verwenden Gliederung und allout Nebenmodi zum Aufteilen von Programmquellen.
  3. ^ Man kann das benutzen set-selective-display Funktion in Emacs, um Linien basierend auf der Einrückungsstufe auszublenden, wie in der Universelle Code-Faltung Hinweis.
  4. ^ Die syntaxabhängige Faltung wird von der unterstützt Gliederung und allout Modi für spezielle Gliederungssyntaxen; bis zum verstecken anzeigen Nebenmodus für einige Programmiersprachen; auch von der Semantic-Tag-Folding Moll-Modus und die senator-fold-tag Befehl für Syntax unterstützt von semantisch (ein Bestandteil von CEDET)sowie von doc-Modus für JavaDoc- oder Doxygen-Kommentare von TeX-Fold-Modus, sgml-fold-element Befehl,
    nxml-outn Bibliothek in den entsprechenden sprachspezifischen Modi und möglicherweise in anderen Modi für bestimmte Syntaxen. Manchmal ist der Standard einfach Gliederung Der Moll-Modus wird verwendet, um syntaxbasiertes Falten zu simulieren, vgl. das verwenden davon in richtig eingerücktem Emacs Lisp-Quellcode, dem Verwendung davon (siehe am Ende der Seite) für richtig eingerücktes HTML. Mehrere Faltmechanismen werden durch die vereinheitlicht Fold-Dwim Schnittstelle. Siehe auch CategoryHideStuff.
  5. ^ Das Falten von benutzerdefinierten Regionen in Emacs wird von der implementiert hide-region-hide Befehl.
  6. ^ Das set_selective_display Die Funktion kann verwendet werden, um Zeilen auszublenden, die über einen bestimmten Betrag hinaus eingerückt sind.
  7. ^ STET war möglicherweise der erste Texteditor, der das Falten unterstützte[citation needed]

Siehe auch[edit]

Verweise[edit]

  1. ^ “Datenfaltung im HxD-Hex-Editor (als Funktion des RAM-Editors aufgeführt)”. Abgerufen 2007-04-30.
  2. ^ Die Mutter aller Demos, präsentiert von Douglas Engelbart (1968)abgerufen 2019-12-29
  3. ^ “Geschichte der ISPF”. Abgerufen 27.10.2015.
  4. ^ Beitrag Nr. 31, Rob, Juli 2008
  5. ^ Nordamerikanische Transputerbenutzergruppe. Konferenz (2. 1989: Durham, NC) (1990). Transputerforschung und -anwendungen, 2: NATUG-2, Tagungsband der Zweiten Konferenz der North American Transputer Users Group, 18.-19. Oktober 1989, Durham, NC. Vorstand, John A., Duke University. Amsterdam: IOS Press. p. 85. ISBN 9051990278. OCLC 35478471.
  6. ^ Cormie, David (1986). “INMOS Technical Note 03 – Erste Schritte mit dem TDS” (PDF). transputer.net. Abgerufen 2019-07-19.
  7. ^ “Outliners.com”. Archiviert von das Original am 23.12.2006. Abgerufen 2006-12-27.
  8. ^ LEXX – Ein programmierbarer strukturierter Editor IBM Journal für Forschung und Entwicklung1, 1987, IBM Reprint Bestellnummer G322-0151

Externe Links[edit]