06 Best Practices

Best Practices

Der Begriff "Best Practices" beschreibt die Art von Programmcode-Schreiben, die einen Code mit folgenden Eigenschaften zum Ergebnis hat:

  • leicht verständlich
  • übersichtlich
  • so simpel wie möglich gehalten
  • effizient
  • leicht erweiterbar

Für den Kurs sind vor allem die ersten drei Punkte wichtig, es kann aber nicht schaden wenn ihr euch den Rest für die Zukunft auch gleich angewöhnt.

Same same but different

Auf der rechten Seite sind zwei MATLAB-Skripte zu sehen, die (fast) genau das gleiche machen, obwohl man es ihnen so nicht ansehen würde.

Der offensichtlichste Unterschied: Das linke ist wesentlich kürzer und kommt mit weniger Buchstaben aus.
Bedeutet das, dass das linke besser ist?

Schauen wir mal genauer hin.

Einen ersten Anhaltspunkt geben die Bilder, die die beiden Codes ausspucken.
Das linke sieht ein wenig schräg aus...

Nicht so toller Code

  • unklar was überhaupt gemacht wird
  • nichtssagende Variablennamen
  • Berechnungen sind unübersichtlich, weil zu kompakt
  • Einheiten unbekannt

Ziemlich toller Code

  • Überschrift (Section, eingeleitet durch %%) erklärt sofort worum es in dem Abschnitt geht
  • Variablennamen sind mehr oder weniger selbsterklärend, d.h. man kann anhand des Namens erkennen, was das für ein Wert sein soll
  • Kommentare (eingeleitet durch %) verdeutlichen was hinter der Variable steht, geben die Einheiten an oder erklären, was berechnet wird
  • Leere Zeilen grenzen verschiedene Schritte voneinander ab
  • Leerzeichen zwischen Operatoren ( = + - / * ) und Variablen verbessern die Lesbarkeit (bei = zwingend, beim Rest empfohlen)
  • Klammern fassen Formel-Bestandteile zusammen. Mathematisch nicht notwenig, verbessert aber zusätzlich die Lesbarkeit

Wenn man grauenvoll geschriebenen Code lesen muss      via GIPHY

Wenn der Code einfach und leicht verständlich ist        via GIPHY

  • die gleichen Probleme wie oben
  • wieder absolut kein Anahltspunkt, was überhaupt vor sich geht
  • falsches Anwendungsgebiet für eine while -Schleife
  • Output in das Command-Window nicht durch ein Semikolon am Ende der Ausdrücke unterdrückt
  • Vektoren / Arrays wachsen in jedem Schritt, was sich extrem negativ auf die Performance auswirkt ( z.B. M(end+1)=..., das bedeutet am Ende des Vektors M wird eine neue Stelle erzeugt in die der Wert geschrieben wird)
  • Dank Kommentaren und sinnvollen Variablennamen ist klar was gemacht wird
  • Command-Window wird nicht zugespamt dank dem Semikolon am Ende jedes Befehls
  • for -Schleife macht mehr Sinn, da die Anzahl an benötigten Schritten von Anfang an bekannt ist
  • Arrays zum Speichern von Daten, die in der Schleife berechnet werden, werden vorher initialisiert. Das heißt es werden Arrays mit dem gewünschten Namen erstellt, die genau die am Ende benötigte Größe haben, und mit Nullen gefüllt. Dadurch ist der benötigte Speicherplatz schon reserviert ("alloziert") und muss nicht in jedem Schritt vergrößert werden.

Mehr über Schleifen, wie z.B
- Wann benutze ich welche Art von Schleife?
- Wie benutze ich die Schleife richtig?
- Und: Sollte ich überhaupt eine Schleife benutzen?
findet ihr in einer späteren Lektion.
(Spoiler: In dem Beispiel hier wäre eine Schleife eigentlich überhaupt nicht nötig gewesen!)

ACHTUNG!

Man sollte NIEMALS den Namen einer Funktion für eine Variable verwenden!

Denn: danach kann man die Funktion nicht mehr benutzen, da Matlab immer denkt, es ginge um die Variable!

Also nicht max  = max(data);
sondern z.B. maximum = max(data);

Wenn man das falsch macht bekommt man im Besten Fall direkt eine Fehlermeldung und sieht, dass man was falsch gemacht hat, es kann aber auch passieren, dass Matlab irgendwas ausspuckt, was dann aber garantiert nicht das ist, was man haben wollte.

 

Ihr könnt euch die beiden Skripte inklusive des .csv-files hier herunterladen, wenn ihr sie genauer unter die Lupe nehmen wollt:

Zusammenfassend:

  1. Aussagekräftige Variablennamen verwenden
  2. Berechnungen durch Kommentare erklären
  3. mit Kommentaren die Einheiten festhalten
  4. Skript in Sections untergliedern
  5. Leerzeichen zwischen Operatoren und Variablen