Die Ausdruckklammern in C# [] (Die Ausdruckklammern in C#), Lektion, Seite 723339
https://www.purl.org/stefan_ram/pub/ausdruckklammern_csharp (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C#-Kurs

Die Ausdruckklammern »()« in C♯ 

Einführendes Beispiel

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( ( 65 )); }}
global::System.Console.Out
65

Syntax

Das Zeichen »(« wird „runde Klammer auf“ genannt.

Das Zeichen »)« wird „runde Klammer zu“ genannt.

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

Syntax Wird ein Ausdruck in runde Klammern eingeschlossen, so gilt dies wieder als ein Ausdruck. Während »-« ein Präfixoperator  ist, ist »(  )« ein Zirkumfixoperator : Das heißt, »-« steht vor  seinem Operandenausdruck, aber »()« umgibt  seinen Operandenausdruck.

Typanforderungen

Typanforderungen Ein Ausdruck eines beliebigen Typs darf eingeklammert werden.

Typ

Typergebnis Der Typ des gesamten Ausdrucks ist der Typ des eingeklammerten Ausdrucks.

Die folgenden Typregeln bringen dies symbolisch zum Ausdruck. Sie sind nicht als C♯ -Quelltext zu verstehen.

Typregel für Ausdruckklammern
( int  )= int
( double  )= double
( decimal  )= decimal
( string  )= string

Wert

Wert Bei der Auswertung der Ausdruckklammern wird der eingeklammerte Ausdruck ausgewertet. Der Wert des Ausdrucks mit den Klammern ist derselbe Wert, wie der Wert des Ausdrucks in den Klammern. (Das Einklammern ändert den Wert nicht.)

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( ( 65 )); }}
global::System.Console.Out
65
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( ( "Text" )); }}
global::System.Console.Out
Text

Anmerkung Die runden Klammern werden nicht von jedem als Operatoren angesehen, da der eingeklammerte Wert nicht verändert wird, und manchmal erwartet wird, daß ein Operator den Wert seines Operanden irgendwie verändert.

Syntaktische Rekursion

Da ein eingeklammerter Ausdruck wieder ein Ausdruck ist, kann dieser selber auch wieder eingeklammert werden.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( ( ( 65 ))); }}
global::System.Console.Out
65
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( ( ( ( 65 )))); }}
global::System.Console.Out
65

Kombinationen verschiedener Operatoren

Wenn die in diesem Kurs oft einzeln  vorgestellten Sprachelemente angewendet  werden, werden sie oft miteinander kombiniert. In diesem Kurs können nicht alle möglichen Kombinationen vorgestellt werden. Der Leser muß später also selber an die Möglichkeit denken, neue Kombinationen bilden zu können.

Beispielhaft werden hier einige mögliche Kombinationen gezeigt:

Der Klammeroperator kann einen beliebigen Ausdruck einklammern. Dies kann auch ein Ausdruck sein, der mit einem Minusoperator gebildet wurde.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( ( -65 )); }}
global::System.Console.Out
-65
syntaktische Kombination
Ausdruck
.----------------------------.
| Ausdruck |
.-. | .-. .----------. | .-.
--->· ( ·-->|--->· - ·-->| Ausdruck |--->|--->· ) ·--->
'-' | '-' '----------' | '-'
| |
'----------------------------'

Der Minusoperator kann vor einem beliebigen numerischen Ausdruck stehen. Dies kann auch ein numerischer Ausdruck sein, der mit einem Klammeroperator gebildet wurde.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( -( 65 )); }}
global::System.Console.Out
-65
syntaktische Kombination
Ausdruck
.-------------------------------------.
| Ausdruck |
.-. | .-. .----------. .-. |
--->· - ·-->|--->· ( ·-->| Ausdruck |--->· ) ·--->|--->
'-' | '-' '----------' '-' |
| |
'-------------------------------------'

Das folgende Beispiel zeigt, wie die Klammern (an Stelle eines Leerraums) verwendet werden können, um eine Folge zweier Minusoperatoren (im Gegensatz zum Operator »--«) zu bilden.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( -(-65) ); }}
global::System.Console.Out
65

Da die Klammern den Wert eines eingeklammerten Ausdrucks nicht verändern, ordnen wir ihnen keine eigenständige Operation zu. Das heißt beispielsweise, daß bei der Auswertung von »-(-65)« zwei Operationen stattfinden: zuerst die Auswertung des inneren Minus-Ausdrucks, dann die Auswertung des äußeren Minus mit dem Ergebnis der vorherigen Operation als Argumentwert.

Auch ohne Klammern wird eine (leerraumgetrennte) Folge zweier Minusoperatoren als Anwendung des linken Minusoperators auf des Ergebnis des rechten interpretiert (und nicht als Anwendung des linken Operators auf den rechten Operator), also ist »- -65« gleich »-(-65)« und nicht gleich »(- -)65«. Dies wird auch manchmal beschrieben, indem der Operator »-« als „rechtsassoziativ“ bezeichnet wird.

Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( - -65 ); }}
global::System.Console.Out
65

Substitutionsprinzip

An den Stellen, wo ein Literal eines Typs zulässig ist, ist auch ein eingeklammerter Operatorausdruck desselben Typs zulässig.

Beispielsweise ist an den Stellen, wo das Literal »65« zulässig ist, auch der Operatorausdruck »( -65 )« zulässig.

(In bestimmten Fällen können die Klammern auch entfallen.)

Spezielle Zeichenkombinationen

Wir haben nun schon über die lexikalische Einheit »--« gesprochen und erfahren, daß zwei einzelne Minuszeichen »-« durch Leerraum getrennt werden müssen, wenn sie nicht als die spezielle lexikalische Einheit »--« interpretiert werden sollen. Es gibt einige solcher spezieller Zeichenkombinationen, die eine besondere Bedeutung haben.

An dieser Stelle listen wir nun spezielle Zeichenkombinationen auf, die keine Wörter oder Literale sind und aus mindestens zwei Zeichen bestehen. Darunter finden wir beispielsweise auch wieder die lexikalische Einheit »--«. Als ein Sonderzeichen sehen wir in diesem Abschnitt ein Zeichen an, das in einer der unten aufgelisteten speziellen Zeichenkombinationen vorkommt.

In einem Programm sind Sonderzeichen durch Leerraum zu trennen, wenn sie sonst eine der im folgenden aufgelisteten speziellen Zeichenkombinationen bilden würden, aber diese nicht geschrieben werden soll.

Will man beispielsweise zwei Plus-Vorzeichen »+« hintereinander schreiben, so kann man der Auflistung entnehmen, daß so die spezielle lexikalische Einheit »++« entstehen würde. Um dies zu vermeiden, sind Zeichen, die zwei einzelne Plus-Vorzeichen »+« sein sollen, mit einem Leerraum voneinander getrennt zu schreiben.

Will man aber zwei runde Klammern »(« hintereinander schreiben, so kann man der Auflistung entnehmen, daß es keine  spezielle lexikalische Einheit »((« gibt. Deswegen können diese beiden Zeichen direkt hintereinander geschrieben werden und bleiben doch jeweils einzelne lexikalische Einheiten.

Um die obige Regel anzuwenden, ist es nicht nötig, zu wissen, was all diese speziellen Zeichenkombinationen bedeuten. Einige von ihnen werden aber in späteren Lektionen vorgestellt werden.

Im Zweifel kann man immer ein Leerzeichen vor und hinter jede lexikalische Einheit schreiben, wenn verhindert werden soll, daß sie mit benachbarten Zeichen zu einer speziellen Zeichenkombinationen verschmilzt.

Spezielle Zeichenkombinationen
!=
%=
&&
&=
*=
++
+=
--
-=
->
/*
//
/=
::
<<
<<=
<=
==
=>
>=
>>
>>=
??
^=
|=
||

Übungsfragen

?   Übungsfrage

Welcher der folgenden Texte ist nach dem oben Gesagten ein Ausdruck?

A »(-)«
B »(2)«
C »()«
D »(int)«
E »(2«
F »(2)2«

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 stefanram723339 stefan_ram:723339 Die Ausdruckklammern in C# Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723339, slrprddef723339, 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/ausdruckklammern_csharp