dedlfix: Zahlenreihe mit JavaScript bearbeiten

Beitrag lesen

Tach!

Auch dein Gehirn wird arbeiten wie jedes andere auch und nach und nach die Details vergessen, die du in diesen Code hast einfließen lassen. Es ist deshalb wichtig, den Code so zu schreiben, dass er verständlich ist und nicht erst noch großartig analysiert werden muss, wenn jemand (inklusive deinem späteren Ich) daran etwas ändern möchte. Ein großes Problem dabei sind Magic Numbers und Strings. Das sind Zahlen- und String-Werte, die verwendet wurde, um etwas zu erreichen, aber deren Bedeutung nicht aus ihnen selbst ersichtlich ist. Ihnen ist dann sozusagen eine Magie innewohnend, die nur dann funktioniert, wenn man den richtigen Wert trifft. Wenn beispielsweise die 23 mehrfach im Code auftaucht, hat sie dann jeweils dieselbe Bedeutung oder unterschiedliche? Wenn ich daran etwas ändern möchte, muss ich alle Vorkommen beachten oder nur bestimmte? Auch Probleme mathematisch statt logisch zu lösen birgt einiges Potential, den Sinn darin nicht oder schwer zu erkennen.

Deshalb die Vorschläge: Erstell Konstanten für konstante Werte statt Literale zu verwenden (außer vielleicht bei einfachen Werte, wie 0 als Startwert einer Schleife, das sieht/weiß man auch so). Konstanten können benannt werden. Das ist der schwierigste Part beim Programmieren, einen kurzen prägnanten Begriff zu finden, der die Bedeutung widerspiegelt, die man auch noch Jahre später wieder erkennt. Einbuchstabige Variablennamen (außer vielleicht bei offensichtlichen Laufvariablen in Schleifen) sind dafür zum Beispiel keine gute Wahl.

Benannte Dinge sind schonmal die halbe Miete. Der Rest muss mit Kommentaren erklärt werden. Aber nicht das Offensichtliche kommentieren, das sieht man, sondern was der Sinn dahinter ist. Auch das ist schwierig, weil man nicht weiß, was man später nicht mehr weiß und lieber damals erklärt hätte, als man es noch wusste. Offensichtlich ist sowas wie

x = x + 1; // hier wird 1 addiert

Das sieht man, dass da eine 1 addiert wird. Aber warum geschieht das da, solange es sich nicht einfach aus dem Kontext herauslesen lässt.

x=document.Eingabe.nummer.value; // da kommt meine 11-stellige Zahl aus dem Eingabedialog 
for (var i = 0; i <= 10; i++) {  

Warum hier eine 10 und nicht die 11? Aus dem Kommentar erkennt man, dass die Eingabe 11 Zeichen lang ist, aber die Verarbeitung nimmt eine 10. Ist das Absicht, nur 10 Zeichen zu verarbeiten oder muss man erst den Code analysieren, um den Zusammenhang zur 11 zu erkennen? Sprechender wäre, < statt <= zu nehmen und eine 11, oder besser:

x=document.Eingabe.nummer.value; // da kommt meine 11-stellige Zahl aus dem Eingabedialog 
for (var i = 0; i < x.length; i++) {  

length ist auch dann sprechend, wenn die 11 nicht als Kommentar dabeisteht. Noch sprechender wäre es, forEach() zu nehmen, wenn man über alle Elemente einer Menge iterieren möchte. So eine Methode hat ein Javascript-String nicht, aber der lässt sich mit Array.from() in ein Array aus Zeichen umwandeln.

Es fehlt auch eine Prüfung der Eingabe, dass sie wirklich 11 Zeichen lang ist. Überhaupt ist eine weitere schwierige Aufgabe, nicht nur den Sonnenscheinfall abzuarbeiten, sondern zu erkennen, was alles schiefgehen kann. Dementsprechende Prüfungen vor dem Verarbeiten der Eingabe und, wenn man die Arbeit an Funktionen delegiert, deren Fehlerstatus zu prüfen, bevor man weiterarbeitet, gehören zum unverzichtbaren Alltag des Programmieres, wenn man robuste Programme erstellen möchte.

dedlfix.