Die Addition in JavaScript (Die Addition in JavaScript), Lektion, Seite 722783
https://www.purl.org/stefan_ram/pub/addition_javascript (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
JavaScript-Kurs

Die Addition in JavaScript 

Einführendes Beispiel

In JavaScript  kann auch eine Summe in der gewohnten Schreibweise als Ausdruck verwendet werden. Die Addition wird mit dem Pluszeichen »+« geschrieben.

Auswertung
1 + 1
2

Syntax

Wir erweitern das Syntaxdiagramm für Ausdrücke um den Additionsoperator »+«.

Neue, erweiterte Syntax
Ausdruck
.----------.
---.----------------->| Literal |-----------------------------.--->
| '----------' ^
| .-. .----------. .-. |
'-------->( ( )--->| Ausdruck |--->( ) )--------------------'
| '-' '----------' '-' |
| .-. .----------. |
'-------->( - )--->| Ausdruck |-----------------------------'
| '-' '----------' |
| .-. .----------. |
'-------->( + )--->| Ausdruck |-----------------------------'
| '-' '----------' |
| .------. .----------. |
'--->( typeof )--->| Ausdruck |-----------------------------'
| '------' '----------' |
| .----------. .-. .----------. |
'----------------->| Ausdruck |--->( / )--->| Ausdruck |----'
| '----------' '-' '----------' |
| .----------. .-. .----------. |
'----------------->| Ausdruck |--->( + )--->| Ausdruck |----'
'----------' '-' '----------'

Die Addition wird mit dem Pluszeichen »+« geschrieben. Sind A  und a  zwei Ausdrücke, so ist A +a  wieder ein Ausdruck, die Summe  von A  und a. Dabei wird A  auch Augend  und a  Addend  genannt. (Diese vereinfachte Syntax bringt die Priorität und Assoziativität der Addition nicht richtig zum Ausdruck. Diese beiden werden daher weiter unten separat erklärt.)

Typanforderungen

Der Augend und der Addend kann jeden der bisher vorgestellten Typen haben.

Typ

Ist der Typ des einen Operanden »string«, so wird der Wert des anderen Operand in diesen Typ gewandelt, und die Summe hat den Typ »string«. Andernfalls müssen beide Operanden den Typ »number« haben, und die Summe hat dann ebenfalls den Typ »number«.

Typregeln für den Fall, daß ein Operand den Typ »string« hat

string  + … → string 
+ string string 

(In diesem Teil des Kurses wird der Typ »boolean« derzeit noch nicht immer mit berücksichtigt, was in einer späteren Version des Kurses korrigiert werden soll.)

Wert

Bei der Auswertung einer Addition werden beide Operanden ausgewertet. Der Wert eines Additionsausdrucks mit einer Zeichenkette ist die Verkettung (Hintereinanderschreibung) der Zeichenketten (Zeichenfolgen) der beiden Operanden (Beispiele dazu folgen weiter unten). Der Wert eines Additionsausdrucks mit Operanden vom Typ »number« ist die Summe dieser Operanden.

Zeichenfolgenaddition

Der Operator »+« ist wie der zuvor vorgestellte Operation »/« polymorph und hat sogar noch eine zusätzliche „Überladung“ (d.h.: Bedeutung) für den Typ »string«. Falls beide Operanden Zeichenfolgen sind, so bedeutet dieser Operator die Schreibung der rechten Zeichenfolgen hinter die linke (also eine Hintereinanderschreibung / Verkettung in der gegebenen Reihenfolge).

Auswertung
"1." + "2.a"
"1.2.a"

Das folgende Beispiel zeigt, wie eine Zeichenfolge angegeben werden kann, welche sowohl ein Anführungszeichen als auch ein Apostroph und ein Gravis enthält.

Ausdruck
`"'` + '`'
Darstellung des Wertes (Browsertyp A)
""'`"
Darstellung des Wertes (Browsertyp B)
"\"'`"

Zeichenfolgenaddition mit Zahlen

Bei Ausdrücken der Signatur number +string, string +number, number +string  oder string +number  wird, wie schon oben festgehalten, der jeweils andere Operandenwert auch nach string  gewandelt  (also in eine Darstellung als Zeichenfolge umgewandelt) und anschließend eine Verkettung  der beiden Zeichenfolgen vorgenommen.

Auswertung
2 + "3a"
"23a"
Auswertung
"2" + 3
"23"
Auswertung
2 + 3
5
Auswertung
2 + +"3"
5
Auswertung
+"5" + 1
6
Auswertung
-"5" + 1
-4

Polymorphie

An diesem Operator kann man die Bedeutung des Wortes Polymorphie  besonders gut erklären, weil hier offensichtlich zwei ganz verschiedene Operationen in Abhängigkeit vom Typ der Operanden ausgeführt werden: die arithmetische Summierung und die Zeichenfolgenverkettung.

Arithmetische Summierung
123 + 456
Zeichenfolgenverkettung
"a" + "b"

Ohne  Polymorphie würde man für die Zeichenfolgenverkettung einen anderen  Operator verwenden (wie beispielsweise »&« oder ».«).

Die Polymorphie ist in diesem Falle umstritten, da man es in Frage stellen kann, ob man das Verketten von Zeichenketten als eine Art von „Addition“ ansehen darf. Falls dem nicht so wäre, dann wäre es falsch oder schlechter Stil, das Additionszeichen »+« dafür mitzuverwenden. Jedoch könnte man dies dann nur den Gestaltern der Programmiersprache vorwerfen, nicht aber ihren Benutzern (also den Programmierern). Deswegen sollte sich der Leser durch diese Bedenken nicht davon abhalten lassen, die Verkettung mit dem Pluszeichen »+« jederzeit zu verwenden, wenn sie ihm als nützlich erscheint.

Die Kritiker sehen in dem mathematischen Symbol »+« ein Zeichen, das für eine kommutative  Operation steht, eine Operation also, bei der die Reihenfolge der Operanden auch vertauscht werden kann, ohne das Ergebnis (die Summe) zu ändern. Sie sagen, daß das Summenzeichen für die Zeichenfolgenverkettung nicht  verwendet werden sollte, weil diese nicht kommutativ ist. Dabei übersehen sie aber, daß man das Symbol »+« auch in der Mathematik manchmal für nicht-kommutative  Operationen (in Monoiden) verwendet. Außerdem ist die Polymorphie mit ihrer „metaphorischen Verwendung“ von Verben ein wichtige Eckpfeiler der objektorientierten Programmierung (wie später im Kurs behandelt werden wird), und daher paßt es zu einer objektorientierten Programmiersprache, diese auch bei Operatoren zu verwenden. Schließlich gibt es in der Praxis keine Probleme mit dieser Überladung des +-Operators.

Linksassoziativität

Ohne Klammerung wird bei einer Addition der Form » + + « zuerst die am weitesten links  stehende Summe auswertet. (Dabei stehen die Ellipsen »« für Literale, Klammerausdrücke oder Quotienten.)

In dem folgenden Programmbeispiel wird daher zuerst eine numerische Summe  berechnet und erst danach eine Zeichenfolgenverbindung  vorgenommen.

In der folgenden Darstellung der bei der Auswertung eines Ausdrucks erfolgenden Operationen, gehört zu jeder Operation ein nach rechts weisender Pfeil. Der von der Operation ausgewertete Operand ist durch einen waagerechten Strich über ihm gekennzeichnet.

Operationen bei der Auswertung von »1 + 2 + "4"«:
Operation arithmetische Summierung von »1« und »2«, Ergebnis »3«.
_____
1 + 2 + "4" →
3 + "4"
Operation Wandlung von »3« in die Zeichenfolge »"3"« und Verkettung von »"3"« und »"4"«, Ergebnis »34«.
_______
3 + "4" →
"34"
Auswertung
1 + 2 + "4"
"34"
Operationen bei der Auswertung von »"1" + 2 + 4«
Operation Wandlung von »2« in die Zeichenfolge »"2"« und Verkettung von »"1"« und »"2"«, Ergebnis: »"12"«.
_______
"1" + 2 + 4 →
"12" + 4
Operation Wandlung von »4« in die Zeichenfolge »"4"« und Verkettung von »"12"« und »"4"«, Ergebnis: »"124"«.
________
"12" + 4 →
"124"
Auswertung
"1" + 2 + 4
"124"

Das folgende Beispiel zeigt, daß die Addition der leeren Zeichenfolge »""« einen Text nicht verändert, so wie die Addition von 0 eine Zahl nicht verändert.

Auswertung
">" + "" + "<"
"><"
Auswertung
1 + 0 + 1
2

Priorität

Die Priorität  der Addition ist kleiner  als die der Division. Das heißt, daß ein Operandenausdruck, der ein Literal oder ein Klammerausdruck ist und direkt zwischen einem »+« und einem »/« steht, zu dem »/« gezählt wird.

Operationen bei der Auswertung von »2 + 4/2«.
Operation Division von »4« durch »2«, Ergebnis: »2«.
     ___
2 + 4/2 →
2 + 2
Operation Addition von »2« und »2«, Ergebnis: »4«.
______
2 + 2 →
4
Auswertung
2 + 4/2
4

Um eine spezielle gewünschte Zusammenfassung  zu erreichen, können Ausdruckklammern verwendet werden.

Operationen bei der Auswertung von »( 2 + 4 )/2«.

Operation Addition von »2« und »4«, Ergebnis: »6«.
_________
( 2 + 4 )/2 →
6 /2
Operation Division von »6« durch »2«, Ergebnis: »3«.
___
6/2 →
3
Auswertung
( 2 + 4 )/2
3

Vorzeichen  haben eine höhere Priorität als die Addition:

Auswertung
-3 + 9
6
Auswertung
-( 3 + 9 )
-12

Wir können den Operator »typeof« verwenden, um den Typ eines Ausdrucks zu ermitteln.

Auswertung
typeof 2 + "3"
"number3"

Hinter diesen Operator müssen nicht notwendigerweise immer Klammern geschrieben werden. Seine Priorität ist aber höher als die der binären Operatoren. Daher muß eine Summe eingeklammert werden, wenn der unäre Operator die Summe als Operand haben soll.

Auswertung
typeof( 2 + 3 )
"number"
Auswertung
typeof( "2" + 3 )
"string"
Auswertung
"" + 2
"2"

In der folgenden Tabelle haben die Operatoren eine höhere Priorität, die weiter oben stehen.

Priorität der bisher behandelten Operatoren
()                   Eingeklammerter Ausdruck
+ - typeof Unaere vorangestellte Operatoren
/ Division
+ Addition

Typwandlungen

Wandlung einer Zeichenfolge in eine Zahl

Eine Zeichenfolge kann (wenn sie ein geeignetes Numerale ist), durch das positive Vorzeichen in eine Zahl gewandelt werden.

Auswertung
typeof "2"
"string"
Auswertung
typeof +"2"
"number"

Wandlung einer Zahl in eine Zeichenfolge

Eine Zahl kann durch Verkettung mit der leeren Zeichenfolge in eine Zeichenfolge gewandelt werden.

Auswertung
typeof 2
"number"
Auswertung
typeof( 2 + "" )
"string"

Formatierung

Leeraum kann frei verwendet werden, um Ausdrücke übersichtlich zu schreiben.

Beispiele

2+4/2

2 + 4/2

2 + 4 / 2

Beispiele

(2+4)/2

( 2 + 4 )/ 2

( 2 + 4 ) / 2

Aus der freien Wildbahn  Versteckendes JavaScript 

„Aus der freien Wildbahn“
Unter der Überschrift „Aus der freien Wildbahn “ stellen wir in diesem Kurs Anwendungsmöglichkeiten der Sprache JavaScript  vor, die nicht immer besonders empfehlenswert sind, aber die in der Praxis beobachtet wurden. Es kann helfen, solche Anwendungsmöglichkeiten zu kennen und zu verstehen, auch wenn man sie nicht unbedingt selber einsetzen möchte.

Es gibt Schutzprogramme, die in Webseiten nach den Adressen gefährlicher Angebote suchen, um deren Anzeige zu verhindern. Einige JavaScript -Programme versuchen, solche Schutzprogramme auszutricksen, indem sie solche Adressen im Quellcode nicht direkt verwenden, sondern mit einem Ausdruck schreiben, welcher die richtigen Adressen erst zur Laufzeit ergibt. Beispielsweise enthält ein Skript dann »"www.exam" + "ple.com"« an Stelle von »"www.example.com"«. Damit kann nun die Adresse »www.example.com« nicht mehr im Quelltext gefunden werden.

Übungsfragen

?   Ausdrücke

Welcher der folgenden Ausdrücke hat denselben Wert wie »1 / 2+3«?

»1/( 2+3 )«   Anton
»( 1/2 )+ 3«  Berta

?   Ausdrücke

Welche Werte haben die folgenden Ausdrücke jeweils?

A »1 +( 9 + "C" )«
B »1 + 5 + "A"«
C »"2" + 3 + 4«

/   Bezeichnung eines Ausdrucks *

Würden Sie den Ausdruck »2 + 4/2« als eine Summe oder als einen Quotienten bezeichnen? Begründen Sie ihre Wahl!

?   Verständnis von Fachbegriffen *

Welchen Wert hat der Ausdruck »12/4+2«?

Angenommen die Addition hätte keine niedrigere Priorität als die Division, sondern eine höhere. Welchen Wert hätte dann der Ausdruck »12/4+2«?

Übungsaufgaben

/   Beschriftung einer Ausgabe

Berechnen Sie mit JavaScript  die Summe 2+3 (diese soll nicht im Kopf ausgerechnet werden) und geben Sie das Ergebnis dann mit dem Text »2 + 3 = « (acht Zeichen) davor und dem Text ».« (ein Zeichen) dahinter aus. Die Ausgabe soll also lauten: »2 + 3 = 5.«

/   Terme ⃗

Die in der Mathematik vorkommenden Schreibweisen für Werte werden Terme genannt. In JavaScript  verwendet man keine Terme. Die Ausdrücke von JavaScript  haben aber Ähnlichkeit mit Termen. Viele Terme lassen sich auch als Ausdruck schreiben und umgekehrt.

Schreiben Sie möglichst kurze Ausdrücke für die folgenden Terme, ohne vorher irgendwelche Teile der Terme im Kopf auszurechnen. Die Werte der Ausdrücke sollten den mathematischen Werten der vorgegebenen Terme möglichst nahe kommen, also den Werten, die man in der Grundschule als Werte der Terme ansehen würde.

Term (Ein Halb plus drei Viertel, erwartete Ausgabe zirka »1.25«)
 1       3
--- + ---
2 4
Term (Drei plus Vier im Zähler und Fünf plus Sechs im Nenner, erwartete Ausgabe zirka »0.6363636363636364«)
  3 + 4
---------
5 + 6

Die Abstraktion des unsichtbaren Implementation (black box ) *

Der Operator »+« wird in der Regel nur dadurch beschrieben, welches Ergebnis  er liefert. Die Technik, wie  der Operator »+« es erreicht, das richtige Ergebnis zu „finden“ wird verborgen. Dadurch wird der Verwender dieses Operators davon entlastet, sich über die Details der Umsetzung Gedanken machen zu müssen.

Man kann dies mit einer Maschine wie beispielsweise einem Fahrstuhl vergleichen: Der Bediener muß nur wissen, welche Wirkung die einzelnen Knöpfe haben (er muß also nur die Oberfläche zur Bedienung kennen), aber nicht, wie die Technik das im einzelnen realisiert. Das Innere der Maschine ist für den Benutzer nicht sichtbar (abstrahiert).

Die Umsetzung von Funktionen wird Implementation  (hier wäre dies also die „Implementation der Addition“) genannt. Die Implementation wird in der Programmierung oft verborgen.

Diese Abstraktion der „unsichtbaren Implementation“ (black box ) ist eine der wichtigsten Techniken, die in der Programmierung zur Beherrschung der Komplexität großer Programm eingesetzt wird.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722783 stefan_ram:722783 Die Addition in JavaScript Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722783, slrprddef722783, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/addition_javascript