Codefaltung effizient nutzen

Tach an alle Linuxer,
Meine aktuelle Frage ist eventuell noch kniffeliger als meine andere im
Blog erlaeuterte. Sie ist auch nicht Linux spezifisch aber eventuell
interressant fuer alle Coder.

Es geht um das Feature der Codefaltung und dessen effiziente Nutzung in
Codeeditoren. Fast alle aktuellen Quelltexteditoren bieten dieses
Ausstattungsmerkmal. Damit lassen sich ganze Codesequenzen im Quellcode ein
und ausklappen. Sinn ist das man nicht seitenweise in seinem Code scrollen
muss um diesen an einer ganz bestimmten Stelle zu editieren. Alle aktuell
nicht benoetigten Codesequenzen werden einfach eingeklappt, und nur das
interresierende zum editieren ausgeklappt.

Realisiert wird dies durch eine zusätzliche Leiste am linken Rand des Quellcodeeditor neben der Zeilennummerierung ausserhalb des eigentlichen Textbereiches beispielsweise mit anfassbaren Pfeilen.

So die Theorie. Basieren tut diese Technologie auf die automatische
Erkennung einer zusammenhaengenden Codesequenz. Grundlage dafuer ist das
Quellcode in Intervallen organisiert ist. Der Beginn eines Intervall wird
durch ein bestimmtes syntaktisch elementares Zeichen oder einer Sequenz
eingeleitet und am Ende durch deren komplimentaeres Element ausgeleitet.

Beispiel waere hierzu die geschweifte Anweisungsblockklammer in der
C-Programmierung zur Einrahmung eines Sets an Anweisungen. Oeffnende und
zugehoerende schliessende Klammer werden im Quelltext von der Codefaltung
identifiziert und der Code dazwischen ist dann wahlweise ein- oder ausklappbar.

Ich benoetige dieses Feature aktuell in Zusammenhang mit der HTML- und
JavaScript Programmierung. Theoretisch bieten sich diese Sprachen
besonders gut fuer die Codefaltung an, da in ihnen das Prinzip der
Intervallgueltigkeit durch die oeffnenden und schliessenden Tags auf die
Spitze getrieben ist.

Haken ist aber hierbei das die Faltung natuerlich nur nach Quelltextsyntaktischen und nicht nach semantischen Kriterien funktionieren kann. Ein auf und zuklappbares Quelltextintervall muss nicht automatisch auch eine eigene inhaltlich funktionale Einheit bilden.

Eines der wenigen Gegenbeispiele sei im Folgenden erlaeutert. Wir lassen ein p – Absatz Tag“ mit Hilfe der Codefaltung ein-  und ausgeklappen. In einem HTML- Formatierten klassischen Sachtext dient das P-Tag eigentlich nur der Formatierungsanweisung fuer die Absatzbildung in der Frontend Darstellung auf dem Bildschirm. Da Absaetze aber auch eine thematisch zusammenhaengende Informationseinheit bilden, haben wir in diesem speziellen Fall die Situation das die technologische Codefaltung mit der der semantischen korrespondiert.

Moechte man aber beispielsweise einen Variablendeklarationsbereich innerhalb
einer JavaScript Sequenz spezifisch ein oder ausklappen, wuerde die
Codefaltung aber nur den kompletten JavaScript Bereich anhand der geamten
oeffnenden und schliessenden Tag-Sequenz
identifizieren und alles ein oder ausklappen. Denn im Sinne der
Quelltextsyntax stellt der Variablendeklarationsbereich erst eimal keine
eigene Entitaet dar.

Ich habe es mir mittlerweile angewöhnt semantisch eine Einheit bildenen
HTML – Codes mit einer horizontalen Linie und einer mittig angeordneten
Hinweismitteilung zum Beginn und einer 2. am Ende einzurahmen und damit vom
anderen Code abzugrenzen. Diese Linie baue ich einfach mit Bindestrichen
auf. Da sie Syntaktisch natuerlich in keiner Weise eine Wirkung haben darf
ist sie Teil einer HTML – Kommentar Sequenz.

In der Art:

Bla, Bla, Bla

Leider laesst sich eine so selbstdefinierte semantische Klammerung nicht in
das Codefaltungsfeature einbinden da die Codefaltung Kommentarsequenzen
generell ignorieren. Dachte ich zumindestens weil mir die Faltung im Editor sublime text zunaechst nicht gelang. Dazu aber spaeter mehr.

Allerdings koennte ich sie im oben gezeigten Beispiel der Faltung von
Absaetzen dazu nutzen Kapitelueberschrifen und deren Abschluss zu
generieren Die Kapitelgrenzen weden vor und nach dem jeweiligen p-Tag
gesetzt und sind damit selbst nicht Element der Codefaltung. Bleiben wenn
man so will immer ausgeklappt. Sind alle Absaetze eingeklappt, seh ich vom
Sachtext nichts mehr, koennte aber anhand der als Kommentarsequenz
gestalteten Kapitelueberschrift sofort den Absatz identifizieren dem ich
noch eine Anmerkung hinzufuegen moechte und diesen ueber die Codefaltung
aufklappen.

Eine faltfaehige Codesequenz ist im HTML – Kontext fast immer auch eine nach aussen hin wirkende HTML-Formatierungs Sequenz. D.h man kann nicht einfach HTML-Tags in den Quelltext einbauen die nur der spezifischen Faltung des Codes dienen sollen. Sie würden
immer auch auf das Layout des Bildschirm Frontends durchschlagen.

Mit nach meiner bisherigen Erkenntnis einer Ausnahme dem JavaScript
Intervall einrahmenden – Tag.

Man braeuchte also Quelltextstatements die nur in der Codefaltung wirken.
Codeelemente die innerhalb eines Quelltextes in einem eigenen Kontext
wirken, nennt man in einem anderen Zusammenhang typischer Weise
Praeprozessor Statements.

Im oben eräuterten Beispiel der separaten Einfassung des Variablendeklarationsabschnittes, für die Codefaltung koennte man also statt einen kompletten JavaSript intervall einrahmenden Script – Tag den Variablendeklaraionsbereich mit dem

2 Kommentare

  1. mmmh.
    Zuletzt habe ich (in der Entwicklung von SAS-Programmen) mit Notepad++ (ja, läuft nur unter „Jehova“) gearbeitet.
    Wenn ich nicht ganz falsch liege, markiert man einen Bereich und klappt den ein.
    Klappt man einen weiteren Bereich ein, der eine Einklappung enthält, geht das nach dem Zwiebelprinzip,
    das Ausklappen entsprechend (oder komplett).
    Bei meinen (zur Zeit) kurzen Skripten unter Linux habe ich Falten noch nie weiter benötigt – empfinde es aber seit Atari ST/GFA_Basic-Zeiten prinzipiell als eine essentielle Funktion.
    (Ich meine, zumindest das Ausblenden aktuell nicht benötigter Zeilen gibt es selbst auf dem Mainframe seit wann – 1980 oder früher?)
    Visual Studio und Godot Engine machen es offensichtlich syntax-orientiert (ganze Funktionen, Var.-Def., Befehlsstrukturen), Gambas kann es wohl nur mit einzelnen Prozeduren/Funktionen.
    Womit entwickelst und editierst Du?

    Antworten

    1. Hallo Dirk,
      zu aller erst muss ich sagen das dieser Beitrag völlig unabhängig von seinem Inhalt ein Test für den Backend Zugang zur Homepage der Wilhelmshavener Linuxer war. Das das ein Test war merkst du auch daran das ich ihn per Copy und Paste von meinem Rechner rübergezogen habe, und dabei ist gar nicht der volle Text rübergekommen. Deshalb endet es so abrupt. Dein Kommentar erinnert mich daran das ich das noch korrigieren muss !! Dann werden meine Überlegungen vielleicht noch etwas nachvollziehbarer:-) Dazu kommt das ich zur Demonstrationsvisualisierung HTML-Tags eingebaut hatte die dann das WordPress im Frontend einfach verschluckt.

      Was ich eigentlich sagen wollte ist, das es oft sinnvoll wäre spezifische Codeansichten zu haben die Funktionsdeklarationen und ihre Aufrufe gleichzeitig anzeigen. Damit man beispielsweise Parameterübergaben, oder wo eine Funktionsrückgabe bleibt, mit einem Blick sehen kann. Denn manchmal sieht man einen Schnittstellenfehler zwischen Aufruf und Deklaration einer Funktion auf den ersten Blick gar nicht, weil sie eben nicht mit einem Blick erfassbar sind. Oft sind diese ja auch in verschiedenen Dateien versteckt, dann nützt einem die Codefaltung ohnehin herzlich wenig weil ein bestimmter Editor ja immer nur eine Datei zeigt.

      Vielleicht poste ich das hier auch noch einmal. Denn das obige Beispiel ist nur eine Facette von etlichen Kritikpunkten die ich an die die meisten gängigen Quelltext Editoren habe. Alle haben eins gemein sie verstehen sich eben als Editoren die eine archaische Editation zulassen. Und diese Metapher als ganzes hinkt. Normalerweise müsste Editoren meiner Meinung nach so arbeiten das sie Editionen die zu einer auch nur zwischenzeitlich unkorrekten Syntax führen würden so gut es geht grundsätzlich zu unterdrücken suchen, anstatt das ich durch rätselhafte Compilermeldung die nie das wirkliche Problem anzeigen rausfinden muss was ich falsch gemacht habe.

      Pseudo Freiheitsgrade vermeiden wäre meine Losung 🙂

      Und wie wenig die Editoren das teilweise verinnerlicht haben kann man beispielhaft an der Autovervollständigungs Arbeitsweise zwischen „meinem“ Sublime Text Editor im Vergleich zum VS-Code , dessen Arbeitsweise ich letztens in einem youtube-Video gesehen habe sehr schön zeigen. 

      Wenn ich im „sublime-text“ ein öffnendes html-Tag ausschreibe, wird das zugehörige schliessende Tag erst in dem Moment erzeugt in dem ich wieder „spitze Klammer auf“ und dann „Schrägstrich“ tippe. In dem Moment erkennt der Editor das ich ein Tag schliessen will und er weiss ja auch noch welches geöffnet war und schliesst es dann korrekt.

      Aber worin liegt die Notwendigkeit das dieser „Schließ-Kontext“ von mir aus erst einmal herbeigeführt werden muss?

      Deshalb macht es VS-Code ganz anders und erzeugt den Schließ-Tag sobald das komplementäre öffnende Tag erkannt ist.
      Ich vermute da endet aber auch die Intelligenz von VS-Code. Es macht eigentlich nie Sinn das schließende Tags selbst erzeugt werden müssen, und das heißt im Umkehrschluss das sie separat gar nicht anfassbar sein dürften. Der Editor müsste an dieser Stelle jede Editation verweigern als wär das Dokument schreibgeschützt.

      Denn worin sollte an dieser Stelle ein sinnvoller Editionskontext bestehen? – was will ich denn erreichen?

      Will ich den zwischen den Tags liegenden Text in einem anderen Tag einrahmen ? Na gut, dann spring in den öffnenden Tag und editiere diesen wobei der schließende analog mit geändert wird. Will ich das das ganze Element gelöscht wird, dann lösch alles – aber bitte nur wenn ich den Tag geklammerten Text erstmal separat entfernt habe, um zu vermeiden das der dann kontextlos in meinem Dokument rumbaumelt. Usw. usw.

      Wie gesagt ich hab mir verschiedene Gedanken dazu gemacht. Beispielsweise auch wie man ein Editions- Management für Funktionsdeklarationen- und Aufrufe gestalten könnte um syntaktisch fehlerhafte Zwischenstände fast vollständig zu vermeiden.

      Somit verbleibe ich erst einmal mit freundlichem Gruß
      Heiko

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.