Der folgende Programmcode, den du nicht weiter verstehen musst, liefert als Ergebnis die Zahl 120. Falls dich Programmcode abschreckt, lies einfach nur den restlichen Text, dieser Post ist ausserdem ziemlich kurz.


x=2;
i=3;

while (i<6) {
 x=x*i;
 i=i+1;
 console.log(x);
}

x;
    

Du siehst nicht nur das Ergebnis 120 am Ende, sondern auch die Zwischenergebnisse 6 und 24. Du kannst den Code auch editieren, änder mal das x=2 in x=5 und sieh was rauskommt.

Da ich das Zeichen = im Code nicht mag, hab ich das Programm umgeschrieben, in eine andere Form übersetzt. Es kommen keine = mehr vor:


f(2,
  3);
function f(x,i) {
 return i<6 ?
  f(x*i,
    i+1) :
  console_log(x);
}
function console_log(x) {
 return x;
}
    

Ohne viel verstehen zu müssen, sieht du rein formell, das die Zeilen sich nicht viel verändert haben. Ich musste nur zwei neue Zeilen mit function einfügen. Aber die = sind weg! Gut so. Und es kommt am Ende die selbe Zahl raus: 120.

Nun der Kernpunkt: du kannst im ersten Beispiel alle jene Zeilen weglöschen, in denen ein x steht, und du hast trotzdem ein lauffähiges Programm. Das ist gut. Im zweiten Fall geht das nicht, die Zeilen sind sozusagen miteinander verwurstelt. Das ist nicht so gut.

Und trotzdem: Ich bin bereit diesen Nachteil in Kauf zu nehmen, weil ich die = so gar nicht mag. Im Übrigen spuckt der Rechner, wie du siehst, im zweiten Beispiel nur mehr eine einzige Zahl aus, anstatt vier (auch nicht so gut, schluck ich trotzdem).

PS: damit das Löschen der x-Zeilen im ersten Beispiel funktionierte, musste ich der geschwungenen Klammer } eine eigene Zeile spendieren. Das machte in dem Fall ja auch Sinn.

PPS: Neuerdings spendier ich den } keine eigene Zeile mehr. Wen schon kein =, denn schon keine eigene }-Zeile mehr.

PPPS: Nach einem langen Spaziergang hab ich beschlossen, das verwurstelte Beispiel aufzuräumen. Dafür gibt’s Vorbilder in den Schulbüchern, geschrieben von schlauen Leuten, die mit der entstandenen Verwurstelung unzufrieden sind. Das Ergebnis ist:


my_reduce(2,
       my_range(3,6),
       (function(x, i) {return x*i;}));
    

Sieht doch ganz aufgeräumt aus, oder? Die beiden Wörter reduce und range sind allseitsbekannte Allzweckwaffen in jedem Arsenal eines = Vermeiders. Nur die Klammern am Ende häufen sich, was nicht so gut ist (dafür hat aber noch niemand eine Lösung gefunden).

Ich musst ein bischen schummeln, damit der obige Code läuft. Ich musst die Funktionen my_reduce und my_range in diese Webseite einbauen. Die Funktionen sehen bei mir so aus:

function my_range(s, e) { return Array.from({length: e-s}, (function(_, i) { return s+i;}))}
function my_reduce(r, c, f) { return c.length < 1 ? r : my_reduce(f(r, c[0]), c.slice(1), f)}

In meiner Lieblingssprache Clojure sieht das wie folgt aus, die Allzweckwaffen reduce und range sind da standardmässig schon inkludiert:


(reduce (fn[x i] (* x i)) 2 (range 3 6))