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

Beitrag lesen

Nachtrag:

Was das || angeht. || ist halt ein logisches Oder wie in den meisten Programmiersprachen auch mit etwas extra Semantik. Man kann solche Tricks toll finden, Erwartungskonform sind sie nicht, weil das Zeichen eben idR anders verwendet wird.

Ok, vielleicht nicht Erwartungskonform, aber nur, weil man dem Operator idR nicht mehr zutraut als eine logische Oder-Verknüpfung, bzw. deshalb, kaum jemand JavaScript "richtig" lernt. Als Progammiersprache wird sie meistens eh unterschätzt. Viele meinen gar, sie sei nicht wirklich objektorientiert.

Es ist gerade diese "extra Semantik", die den ||-Operator interessant macht.

Statt (a||[])[0] hätte man auch erwartungskonformer (a?a:[])[0] schreiben können, oder auch (a?a[0]:0) bzw. die kürzeste Variante: a&&a[0].

Der &&-Operator hat nämlich eine ähnliche Semantik: Während a||b dem Ausdruck a?a:b entspricht, bedeutet a&&b soviel wie a?b:a.

&& nennt man auch den "guard operator", weil er als Wächter verhindern kann, dass ein ungültiger Wert verarbeitet werden soll:

Wenn z.B. a nicht definiert oder null oder false oder NaN ist, dann ist a[0] sicher ein ungültiger Wert, der zu einem Laufzeitfehler führen würde.
Um das zu verhindern, kann man mit dem Ausdruck a&&a[0] einen gültigen Wert erzwingen.
Denn wenn z.B. a ein Array ist, dann ergibt a&&a[0] immer einen gültigen Wert (das erste Arrayelement), schlimmstenfalls vom Typ 'undefined' beim leeren Array.
Sollte a bereits 'undefined' sein, dann ergibt a&&a[0] ebenfalls einen gültigen Wert, diesmal sicher vom Typ 'undefined' (=a selbst).

Nochmal zur einstelligen Quersumme:

Zu beachten ist dabei, dass die Ausgangszahl n in dezimaler Darstellung übergeben werden muss, wenn der Ausdruck n%b||b für jedes Zahlensystem die richtige einstellige Quersumme liefern soll.

Beispiel:
Mit n=11 und b=5 im 6er-System scheint das Ergebnis 11%5 = 1 falsch zu sein, weil 1+1 ja nicht 1 ergibt.
Da 11d = 1*6 + 5*1 aber die Darstellung "15" im 6er-System hat, ist das Ergebnis 1 korrekt.

Gruß, Don P