Die Zeichenfolgenverbindung »…+…« in Python
Einführendes Beispiel
Zwei Zeichenfolgen können durch den Operator »+« zu einer einzigen Zeichenfolge verbunden (verkettet) werden.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
'ab' + 'cde'
'abcde'
Die Zeichenfolgenverbindung verdeutlicht auch noch einmal, daß die Zeichenfolge »'cde'« nicht mit einem Apostroph beginnt und endet. Dieser wird erst bei der Ausgabe zur Verdeutlichung hinzugefügt.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
'12' + '3'
'123'
Wir bezeichnen diese Operation als Zeichenfolgenverbindung oder Zeichenfolgenverkettung.
Syntax
Für die Syntax dieses Operators gilt das schon zuvor bei der Behandlung des numerischen Additionsoperators »+« Gesagte.
Typanforderungen
Beide Operanden des Operators »+« müssen die Klasse »str« als Typ haben, wenn sie auf diese Weise als Zeichenfolgen verbunden werden sollen.
(Der Fall, in dem beide Operanden numerisch sind, wurde schon früher behandelt.)
Semantik (Wert)
Typsemantik
Das Ergebnis einer Zeichenfolgenverbindung hat die Klasse »str« als Typ.
Wertsemantik
Der Wert eines Additionsausdrucks mit zwei Zeichenfolge als Operanden ist die Verbindung (Verkettung, Hintereinanderschreibung) der Zeichenfolgen (Zeichenketten) der beiden Operanden.
Operatorüberladung
An diesem Operator kann man die Bedeutung des Wortes Polymorphie besonders gut erklären, weil hier offensichtlich zwei ganz verschiedene Operationen in Abhängigkeit von der Klasse der Operanden ausgeführt werden: die arithmetische Summierung und die Zeichenfolgenverkettung.
- Arithmetische Summierung
123 + 456
- Zeichenfolgenverbindung
'123' + '456'
Ohne Polymorphie würde man für die Zeichenfolgenverkettung einen anderen Operator verwenden (wie beispielsweise »&«, »~« oder ».«).
Mit Polymorphie legt man durch die Klasse der Operanden fest, was genau passieren soll.
Diese Art von Polymorphie eines Operators nennt man auch Operatorüberladung. Der Operator »+« ist mit verschiedenen Bedeutungen überladen.
Kombination mit der Zeichenfolgenvervielfachung
Die Zeichenfolgenverbindung kann mir der Zeichenfolgenvervielfachung kombiniert werden, um Zeichenfolgen auf intuitiv verständliche Weise (also ähnlich wie mit gesprochener deutscher Sprache) zu beschreiben/aufzubauen.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
3 * 'a' + 'b'
'aaab'
- auf deutsch
- drei „a“ und ein „b“
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
'(' + 7 * 'b' + ')'
'(bbbbbbb)'
- auf deutsch
- Klammer auf, sieben „b“ und Klammer zu
Aufteilung langer Zeichenfolgenliterale
Eine sehr langes Zeichenfolgenliteral kann mit Hilfe des Operators »+« und der Klammern »(« und »)« auf mehrere Zeilen aufgeteilt werden.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
( 'Grundstuecksverkehrsgenehmigungs' +
'zustaendigkeitsuebertragungsverordnung' )'Grundstuecksverkehrsgenehmigungszustaendigkeitsuebertragungsverordnung'
Das neutrale Element ⃗
Das folgende Programmbeispiel zeigt, daß die Addition der leeren Zeichenfolge »''« einen Text nicht verändert, so wie die Addition von »0« eine Zahl nicht verändert.
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
'>' + '' + '<'
'><'
- Eingabe eines Ausdrucks und Ausgabe einer Textdarstellung seines Wertes
1 + 0 + 1
2
Entsprechend sagt man auch, daß die Zahl »0« das neutrale Element der Addition und die Zeichenfolge »''« das neutrale Element der Zeichenfolgenverbindung sei.
Diskussion der Polymorphie von »+« *
Die Polymorphie ist in Falle der Verwendung des Operators »+« sowohl zur arithmetischen Addition als auch zur Zeichenfolgenverbindung 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 nicht für die Zeichenfolgenverbindung 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. (Obwohl es Stimmen gibt, die sagen, daß dann ein Multiplikationszeichen bevorzugt wird.) 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.