donp: Rekursion vs. Iteration, Mathematische vs. Listen-Operationen

Beitrag lesen

Hallo Martin,

Wenigstens du hast ein bisschen Verständnis für meine Argumente, danke.

Nee, hast du mal den Quellcode angesehen, der sich hinter den von dir aufgerufenen Funktionen verbirgt? Der gehört natürlich mitgerechnet!

Alles was dahinter abläuft, ist eigentlich kein Quellcode mehr, gehört also nicht zwingend mitgerechnet. Es ist mir natürlich bewusst, dass hier evtl. mit Kanonen auf Spatzen geschossen wird.

Unter "Eleganz" des Codes verstehe ich so etwas wie Schönheit im Ausdruck und der Grammatik, so wie man z.B. sagt "im Sonnenlicht" anstatt "in dem Licht der Sonne".

Auch in jeder gesprochenen Sprache setzt sich immer das einfachere, kürzere und schönere durch. Nicht umsonst wurden Dichter wie Goethe berühmt, sondern weil sie mit ganz wenigen Worten sehr viel ausdrücken konnten. Wenn Goethe z.B. schreibt "Die Ungewissheit schlägt mir tausendfach die dunklen Schwingen um das bange Haupt", dann hat er mit nur 12 Worten ein gigantisches Bild hingemalt, für das andere lange Sätze von Konstanz bis Flensburg machen würden ;)).
Manch einer, der der Sprache weniger mächtig ist oder einfach weniger Sinn dafür hat, könnte z.B. argumentieren "muss man denn solche Geschütze auffahren, nur um zu sagen, dass einem wegen einer Unklarheit sehr Unwohl ist?"

Aber ich schweife ab, zurück zu JavaScript:

Die Array-Klammern [] ohne Operand davor sahen für mich ziemlich verunglückt aus; mir war nicht bekannt, dass Javascript auf diese Weise auch anonyme Arrays kennt.

Das weiß ich auch noch nicht lange. Bin gerade dabei solche Feinheiten zu lernen. Jeder programmiert heutzutage in JavaScript, aber kaum jemand hat es von der Pike auf gelernt bzw. das Besondere der Sprache wirklich verstanden. In jeder anderen Programmiersprache wäre das undenkbar.

Also statt "new Array()" schreibt man besser immer "[]", und statt "new Object()" besser nur "{}". Der Compiler versteht's auf Anhieb, und überhaupt kann bzw. sollte man auf den "new" Operator weitgehend verzichten. Statt "new String('Zeichenkette')" also einfach nur 'Zeichenkette' usw. schreiben.

Richtig fies kann's mit "new Boolean()" werden, man nehme z.B.

var bool = new Boolean(false);
if (bool) { doSome(thing); }

Hier würde man eigentlich erwarten, dass "doSome(thing)" nicht ausgeführt wird, da "bool" zuvor mit false initialisiert wurde. doSome(thing) kommt aber dennoch zum Zug, weil der new-Operator immer einen Objekt-Wrapper um die Variable baut. "bool" ist also ein existierendes Objekt, und "if (bool)..." testet jetzt auf die Existenz des Objekts, nicht auf den Wert der Variablen.
Das Problem kann nicht auftreten, wenn man statt dessen schreibt

var bool = false;
if (bool)...

Gruß, Don P