dedlfix: Rekursive Lösung in JavaScript

Beitrag lesen

Tach!

Ich hab da mal noch ein, zwei Gedanken zum Code, nicht zum Algorithmus.

    // provide default value for startnumber
    if (startnumber === undefined) startnumber = 1;

Der schreibfaule Javascript-Programmierer kürzt sowas gern ab zu

startnumber = startnumber || 1;

und das gern auch ohne extra Zeile sondern nimmt lediglich den Teil nach dem = bei der ersten Verwendung (falls es die Situation zulässt).

function findRemainingElements(elements, k, countoffset) {
    // elements must be an array
    if (!Array.isArray(elements)) return undefined;
    // und weitere Prüfungen der Parameter

Wenn man davon ausgehen kann, dass diese Funktion lediglich eine Hilfsfunktion der eigentlich aufgerufenen findRemainingNumbers() ist, dann sind diese Prüfungen der übergebenen Parameter so hilfreich, wie sich die Schuhe anzuziehen und beim anschließenden Verlassen des Hauses nochmal zu prüfen, ob man Schuhe anhat. Hier wird die Funktion kontrolliert aufgerufen, mit Parametern, die passend initialisiert wurden und/oder deren Inhalt bereits geprüft wurde. In anderen Umgebungen (Typescript zum Beispiel) würde man diese Funktion als private Methode einer Klasse ausführen. (Ja, bekommt man auch mit Vanilla-JS hin, nur nicht ganz so einfach.)

Wenn du allerdings davon ausgehst, dass sie soweit von nutzen ist, sie aus anderen Kontexten aufzurufen, dann wird man das wohl auch eher so machen müssen.

Einige Prüfungen kann man sich aber auch dann sparen, nämlich die, wenn die Funktion lediglich ein unbrauchbares Ergebnis liefert, wenn unbrauchbare Eingabewerte übergeben werden, aber sonst nichts weiter kaputtgeht. Wer Garbage übergibt, kann nicht damit rechnen, keinen Garbage zurückzubekommen. Ob man so genau sein muss, den Aufrufer auf seine möglichen Fehler hinzuweisen, kann man sich trotzdem noch überlegen. In einigen Situationen ist das durchaus nicht unangebracht.

Beim Entwickeln meiner Lösung hatte ich mir eine nicht eintretende Abbruchbedingung eingehandelt. Das hat dem Browser ganz schön zugesetzt. Solche Fälle vermeiden zu können, ist auf alle Fälle wert, eine entsprechende Prüfung einzubauen.

dedlfix.