mitmario.dev

Rechnen und zuweisen

JavaScript Im Browser 3 Min Lesezeit 3 BeispieleLektion 1 von 9

Diese Lektion bringt keine neue Fähigkeit, sondern eine kürzere Schreibweise für etwas, das du schon kannst. Lernen musst du sie trotzdem, denn praktisch jeder fremde Code benutzt sie.

Nimm den alten Wert und tu etwas damit

Der häufigste Vorgang überhaupt: Ein Wert steht schon irgendwo, und der neue Wert entsteht aus ihm.

Die Kurzschreibweisen
let kontostand = 100;

// Die lange Form: nimm den alten Wert, rechne, leg das Ergebnis zurück.
kontostand = kontostand - 30;
console.log("Lang:", kontostand);

// Die Kurzform macht genau dasselbe.
kontostand -= 20;
console.log("Kurz:", kontostand);

kontostand += 5;
console.log("Plus:", kontostand);

kontostand *= 2;
console.log("Mal:", kontostand);

kontostand /= 4;
console.log("Geteilt:", kontostand);

kontostand %= 7;
console.log("Rest:", kontostand);

kontostand = kontostand - 30 liest sich sperrig, und der Name steht zweimal da. Dafür gibt es die Kurzform kontostand -= 30, und die gibt es zu jedem der Rechenzeichen aus Lektion 2.3:

+= addiert dazu, -= zieht ab, *= multipliziert, /= teilt, %= behält den Rest.

Die Kurzform tut exakt dasselbe wie die lange. Sie ist keine andere Rechnung, nur weniger zu tippen und weniger zu lesen. Und sie hat einen kleinen praktischen Vorteil: Der Name steht nur einmal da, also kannst du dich nur einmal vertippen.

Denk beim Lesen an die Richtung aus Lektion 2.1: Das Gleichheitszeichen bedeutet „bekommt”. zaehler += 1 heißt „der Zähler bekommt seinen alten Wert plus eins”.

Eins hoch, eins runter

Für den mit Abstand häufigsten Fall, das Hochzählen um eins, gibt es noch eine Stufe kürzer: ++ und --.

Vorne oder hinten, das ist ein Unterschied
// Nachgestellt: erst den alten Wert hergeben, dann erhöhen.
let a = 5;
console.log("Nachgestellt gibt her:", a++);
console.log("Danach steht drin:", a);

// Vorangestellt: erst erhöhen, dann den neuen Wert hergeben.
let b = 5;
console.log("Vorangestellt gibt her:", ++b);
console.log("Danach steht drin:", b);

// Steht der Aufruf allein in einer Zeile, ist es egal.
let c = 5;
c++;
console.log("Allein in der Zeile:", c);

Und hier kommt die Eigenart, über die jeder einmal stolpert. Das Zeichen darf vor oder hinter dem Namen stehen, und das ist nicht dasselbe.

Nachgestellt (a++) gibt erst den alten Wert her und erhöht danach. Vorangestellt (++b) erhöht erst und gibt dann den neuen Wert her.

Am Ende steht in beiden Fällen dieselbe Zahl. Der Unterschied zeigt sich nur, wenn du den Ausdruck gleichzeitig als Wert benutzt, also mitten in einer Ausgabe oder Zuweisung.

Steht c++ allein in einer eigenen Zeile, gibt es keinen Unterschied. Und genau das ist der Normalfall.

Wenn du dir unsicher bist, welcher Wert dabei herauskommt, ist die Eingabezeile der Console genau das richtige Werkzeug: Sie antwortet mit dem Wert des Ausdrucks, und um den geht es hier ja. Tipp let a = 5, dann a++. Zurück kommt 5, also der alte Wert. Tipp jetzt a allein, und zurück kommt 6. Dasselbe mit ++a antwortet dagegen sofort mit 7. Vier Zeilen, und der Unterschied steht als Zahl da, statt beschrieben zu sein.

Die ehrliche Empfehlung: Schreib im Zweifel += 1. Es ist ein Zeichen mehr und dafür eindeutig. i++ in einer Schleife ist eine feste Redewendung, die jeder liest, ohne nachzudenken, und dort ist sie in Ordnung. Überall dort, wo der Wert gleichzeitig weiterverwendet wird, hat schon manche Stunde Fehlersuche an der Frage gehangen, ob das Plus vorn oder hinten stand.

Die Rechenreihenfolge

Punkt vor Strich, und Klammern darüber
// Erst mal, dann plus. Wie in der Schule.
console.log(2 + 3 * 4);

// Die Klammer dreht die Reihenfolge um.
console.log((2 + 3) * 4);

// Bei einer Steuerrechnung entscheidet das über alles.
const nettoInCent = 2000;
console.log("Ohne Klammer:", nettoInCent + nettoInCent * 19 / 100);
console.log("Mit Klammer: ", nettoInCent + (nettoInCent * 19) / 100);

Es gilt, was du in der Schule gelernt hast: Punkt vor Strich. 2 + 3 * 4 ist 14, nicht 20. Klammern gehen darüber, und man kann sie beliebig verschachteln.

Das dritte Beispielpaar ist der Fall, der in echtem Code vorkommt. Beide Zeilen liefern hier dasselbe Ergebnis, weil mal und geteilt gleichrangig sind und von links nach rechts abgearbeitet werden. Aber du musstest darüber nachdenken, und genau das ist der Punkt.

Eine Klammer mehr, als nötig wäre, hat noch nie jemandem geschadet. Sie kostet nichts an Geschwindigkeit, der Browser rechnet ohnehin dasselbe. Sie spart dem nächsten Leser eine Denkpause, und der nächste Leser bist meistens du selbst.

Es gibt eine lange Tabelle mit allen Rangfolgen der Sprache, von der Punktrechnung über die Vergleiche bis zu den logischen Operatoren der nächsten Lektionen. Die musst du nicht auswendig lernen. Merk dir die Schulregel und setz sonst Klammern.

Zum Mitnehmen

Im Zweifel schreib += 1 statt i++. Es ist ein Zeichen mehr und spart dir die Frage, ob das Plus vorn oder hinten stand.

Jetzt du

Basis Konto, kostenlos

Zu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.

Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.

Was in dieser Lektion steckt

  • Artikel mit 3 Beispielen zum Ausprobieren

    Steht hier, ohne Konto lesbar.

  • Aufgabe im Editor, direkt im Browser geprüft

    Öffnet sich mit dem Basis Konto.