Qgelm

Tips für sauberes Programmieren | 64'er Magazin

Originalartikel

Backup

<html> <figure><img alt=„“ src=„https://www.64er-magazin.de/8404/39-1.jpg“ referrerpolicy=„no-referrer“ /><figcaption>Bild 1. Der einzige Unterschied zum Bild 2 sind die eingef&#252;gten Kommentar-/Leerzeilen und eine andere Aufteilung des Programms. Die Reihenfolge und auch der Algorithmus der ausgef&#252;hrten T&#228;tigkeiten Besetzen, Sortieren und Ausgabe sind identisch. Aber ist diese Form der Darstellung nicht wesentlich verst&#228;ndlicher und &#252;bersichtlicher? Hier Erweiterungen anzuf&#252;gen oder Teile zu &#228;ndern, d&#252;rfte keine Schwierigkeiten bereiten. &#220;ber diese Art der Aufteilung (in Unterprogramme) berichten wir in einer der n&#228;chsten Ausgaben.</figcaption></figure><figure><img alt=„“ src=„https://www.64er-magazin.de/8404/39-2.jpg“ referrerpolicy=„no-referrer“ /><figcaption>Bild 2. So sollte es nicht gemacht werden. Dieses Programm ist zwar vom Speicherbedarf her um einiges k&#252;rzer als das von Bild 1, die Anzahl der Befehle ist jedoch fast identisch! Aber wissen Sie hier sofort, um was es geht?</figcaption></figure><p>Mal im Ernst, haben sie nicht auch schon Programme gesehen oder auch selbst erstellt, die im h&#246;chsten Ma&#223;e unleserlich sind? Vor allem, wenn diese Programme in Basic geschrieben sind, vermi&#223;t man des &#246;fteren eine gewisse &#220;bersicht: Da wird ohne ein Konzept wild drauflos getippt, am Anfang wei&#223; man gar nicht so recht, was aus der Programmidee eigentlich mal werden soll. Man f&#228;ngt ganz locker an, und zuerst klappt alles auch sehr gut. Wenn dann die ersten Erfolge vorhanden sind, denkt man bei sich, da&#223; das Programm ja eigentlich etwas mehr k&#246;nnen m&#252;&#223;te, oder man bemerkt einige Fehler, die sich w&#228;hrend des Programmlaufs einschleichen. Nun beginnt man, kleine Routinen zu entwickeln, die dann an das Ende des Programms angeh&#228;ngt werden, oder, was noch schlimmer ist, irgendwo innerhalb des Programms, wo sie an sich nichts zu suchen haben. Schlie&#223;lich hat man ja den GOTO-Befehl, der eventuelle Probleme wirksam &#187;umgeht&#171;. Und so entsteht dann mit der Zeit und mit wachsendem Programm eine kaum noch zu &#252;bersehende Aneinandereihung von Programmzeilen, gespickt mit GOTO-Befehlen. Wenn solche Programme dann ver&#246;ffentlicht werden, hat der interessierte Leser zwar die M&#246;glichkeit, dieses Produkt abzutippen, aber wenn er die Programmlogik erkennen und nachvollziehen will, st&#246;&#223;t er auf allergr&#246;&#223;te Schwierigkeiten. Da hilft manchmal auch eine einigerma&#223;en ausf&#252;hrliche Programmbeschreibung nicht viel. Es soll allerdings Programmierer geben &#8212; und das sowohl bei den Amateuren als auch bei den sogenannten Profis &#8212; die allerh&#246;chsten Wert darauf legen, von keinem durchschaut zu werden. Au&#223;erdem trauen sie sowieso keinem anderen eine Beurteilung ihrer Programme zu. Da&#223; man denen einen schlechten Programmierstil vorwerfen kann, st&#246;rt sie dann nat&#252;rlich auch nicht. (Es gibt F&#228;lle, wo Programmierer sich unk&#252;ndbar gemacht haben, weil kein Mensch au&#223;er ihnen selbst das Programm begreift.)</p><p>Versuchen Sie dann mal, solch ein Programm zu erweitern, sinnvoll eine zus&#228;tzliche Funktion zu implementieren! Auch wenn Sie das Programm selbst &#187;entworfen&#171; haben, und dann nicht peinlich genau-Buchf&#252;hrung &#252;ber jeden Schritt. gef&#252;hrt haben, sind Sie-nach einem Jahr mit Sicherheit nicht mehr in der Lage, Ihr eigenes Produkt zu verstehen, geschweige es sinnvoll zu &#228;ndern beziehungsweise zu erweitern.</p><p>Es gibt aber M&#246;glichkeiten, diese Schwierigkeiten zu verringern. Eine M&#246;glichkeit davon ist die strukturierte Programmierung.</p><p>Ein Programm ist in der Regel eine Folge von Anweisungen, die der entsprechende Rechner ausf&#252;hrt. Ganz am Anfang der &#187;Computerei&#171; war man beschr&#228;nkt auf eine sequentielle Methode der Ausf&#252;hrung, Das hei&#223;t, jeder Befehl wurde in der Reihenfolge ausgef&#252;hrt, wie er auch im Programm vorkam. Eine Verzweigung zu einer anderen Stelle oder eine Wiederholfunktion gab es da noch nicht. Das f&#252;hrte dazu, da&#223; diese Programme sehr starr waren. Man konnte keinen direkten Einflu&#223; auf ihren Ablauf nehmen. Programmteile, die mehrmals vorkamen, mu&#223;ten genauso oft eingegeben werden, wie sie ben&#246;tigt wurden. Heute kennt jeder die Befehle, die Alternativen zum statischen Programmablauf zulassen. In Basic sind das die Befehle &#187;GOTO&#171; und &#187;GOSUB&#171;.</p><p>Programmanweisungen, die den Kontrollflu&#223; bestimmen, zum Beispiel GOTOs, sind also die Ursache daf&#252;r, da&#223; die Anweisungen eines Programms in einer anderen als der aufgeschriebenen Reihenfolge ausgef&#252;hrt werden k&#246;nnen (statisch-dynamisch). Ziel der strukturierten Programmierung ist es, durch eine disziplinierte Vorgehensweise die Fehleranf&#228;lligkeit zu reduzieren. In anderen h&#246;heren Programmiersprachen bedeutet dies zum Beispiel den Verzicht auf GOTOs. An dessen Stelle treten dann einige wenige andere logische Grundstrukturen. In erster Linie handelt es sich um die <strong>Sequenz</strong> von Operationen, <strong>die Auswahl</strong> IF…THEN…ELSE (Verzweigung mit einer oder zwei Bedingungen) und <strong>die Wiederholung</strong> DO..WHILE (einer Gruppe von Operationen, solange eine bestimmte Bedingung erf&#252;llt ist). Neben diesen Grundstrukturen d&#252;rfen noch einige weitere Strukturen verwendet werden, im Regelfall jedoch nicht die unbedingte Verzweigung (GOTO).</p><p><strong>Der Vorteil</strong>: Der Code ist sehr &#252;bersichtlich gruppiert und daher auch f&#252;r andere Programmierer leicht lesbar. Das Testen von strukturiertem Code ist einfach. Strukturierter Code ist leichter wartbar als unstrukturierter.</p><p><strong>Der Nachteil</strong>: Strukturierte Programme k&#246;nnen durch den Verzicht auf GOTO-Anweisungen und durch Codewiederholungen umfangreicher werden als &#228;quivalente, nichtstrukturierte Programme.</p><p>Nun besitzt das normale Standard-Basic diese Strukturen nicht. Wer aber als C64-Besitzer in der gl&#252;cklichen Lage ist, die von Commodore angebotene Basic-Erweiterung Simons Basic sein eigen zu nennen, findet dort einige dieser Befehle (siehe Bericht in dieser Ausgabe). Auch die dort kritisierte Einschr&#228;nkung des RENUMBER-Befehls wird somit gegenstandslos: Simons Basic erlaubt weitgehend eine vollstrukturierte Programmierung mit dem Verzicht auf GOTOs und GOSUBs. Das bedeutet, da&#223; kein Sprung auf eine Programmzeile xyz mehr n&#246;tig ist. Sprungadressen erhalten einen Namen und auch Prozeduren (Unterprogramme) werden mit einem Namen aufgerufen.</p><p>Aber unabh&#228;ngig davon, ob Sie mit oder ohne Simons Basic arbeiten, einige Regeln sollte jeder befolgen.</p><p><strong>Grundregel: Der Code soll einfach, klar und &#252;bersichtlich (nachvollziehbar) sein.</strong></p><p><strong>Dazu geh&#246;ren:</strong></p><ul><li>Die Verwendung einfacher sprachlicher Mittel. Stehen zur Formulierung einer Aktion verschiedene sprachliche Mittel zur Verf&#252;gung, sollte das einfache gew&#228;hlt werden. Das bedeutet: Verzicht auf undurchsichtige Programmierung!</li><li>Das Einr&#252;cken von Befehlsfolgen zur Verdeutlichung von Programmzusammenh&#228;ngen bei geschachtelten Ablaufstrukturen soweit es m&#246;glich ist. Anweisungen gleicher Schachtelungstiefe sollten direkt untereinander geschrieben werden (Bild 1.)</li><li>Einf&#252;gen von Trennlinien zur optischen Trennung von in sich abgeschlossenen Komponenten. Die sollte man vor allem bei langen Programmen vorsehen. Sieerh&#246;hen die Lesbarkeit betr&#228;chtlich (Bild 1).</li><li>Verwendung von Kommentar als Erg&#228;nzung des Codes im Hinblick auf die Problemstellung, nicht als Beschreibung des Codes. Das ist nicht nur bei Assemblerlistings sinnvoll. Der Kommentar zu:<pre>POKE 53281,0 :REM Speicheradresse 53281 mit 0 besetzen</pre>ist sicherlich nicht so sinnvoll wie<pre>POKE 53281,0 :REM Bildschirmfarbe = Schwarz.</pre></li><li>Pro Programmzeile nur eine Anweisung. Sie sollten nicht versuchen, m&#246;glichst viele Befehle in eine Programmzeile hineinzupressen, wenn Sie sich keine Sorgen um den verf&#252;gbaren Speicherplatz machen brauchen.</li><li>Die Gr&#246;&#223;e eines Unterprogramms sollte eine Listingseite nicht &#252;berschreiten, ausschlie&#223;lich der Kommentare.</li><li>Unterprogramme sollen nur einen Eingang und nur einen Ausgang haben. Und das m&#246;glichst am physikalischen Anfang beziehungsweise Ende des Unterprogramms.</li><li>Aufgerufene Unterprogramme m&#252;ssen zum Aufrufpunkt zur&#252;ckkehren. Verlassen Sie kein Unterprogramm mit GOTO! (Es sei denn zum Abbruch des Programms.)</li><li>Benutzen Sie nie eine Variable f&#252;r mehr als einen Zweck! Wenn in einem Teil des Programms zum Beispiel die Variable AL die Bedeutung Alpha f&#252;r einen Winkel besitzt, aber im anderen Teil die Bedeutung: Alter hat, verwirrt es doch sehr, und &#196;nderungen sind sehr fehleranf&#228;llig!</li><li>&#196;ndern Sie nie eine Laufvariable innerhalb der Schleife! (In der Anweisung: FOR I=1 TO 100:PRINT I: NEXT I ist &#187;I&#171; die Laufvariable.)</li><li>Sprunganweisungen, die mehr als eine Listingseite auseinanderliegen, tragen sehr zur Un&#252;bersichtlichkeit bei.</li><li>Vermeiden Sie es, mehr als zwei logische Vergleiche in eine Zeile zu setzen. Es ist sehr schwer, solche Zeilen mit einer Anzahl von logischen Verkn&#252;pfungen nachzuvollziehen.</li></ul><pre>If A AND B OR C AND D AND B &lt; C AND D OR A THEN END</pre><p>Es bereitet nicht nur sehr viel M&#252;he, solch eine Programmzeile zu verstehen, Sie werden auch Probleme haben, sie in einem Flu&#223;diagramm sinnvoll darzustellen! Wenn Sie sich an diese Regeln halten, werden Sie auch nach l&#228;ngerer Zeit noch in der Lage sein, Ihre Programme zu bearbeiten oder sie anderen zu erkl&#228;ren. Und auf diese Art erstellte und ver&#246;ffentlichte Programme geben auch unseren Lesern eine wertvolle Hilfestellung.</p><p>(Fortsetzung folgt)</p> </html>

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information