Festlegung und Verwendung von Wertnamen in C# (Festlegung und Verwendung von Wertnamen in C#), Lektion, Seite 723501
https://www.purl.org/stefan_ram/pub/wertnamenfestlegungen_csharp (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C#-Kurs

Festlegung und Verwendung von Wertnamen in C♯ 

Erinnerung an Namen

Wir hatten vordefinierte  Namen für Werte schon kennengelernt:

In dieser Lektion geht es nun darum, wie in einem Programm neue  Namen für einen Wert festgelegt werden.

Festlegung eines Namens

Das folgende Programm zeigt ein Beispiel für die Festlegung eines Namens. Der Name »n« wird darin mit dem Typ »int« und dem Wert von »7« festgelegt.

Wir nennen einen solchen Namen auch einen Wertnamen, weil er im wesentlichen ein Name für einen Wert ist.

Nach solch einer Festlegung kann der Name als Ausdruck  verwendet werden (also an einer Stelle, an der ein Ausdruck erwartet wird) und hat dann, bei einer Auswertung, den für ihn festgelegten Typ »int« und den für ihn festgelegten Wert »7«. (Dies ist wie bei den schon früher behandelten vordefinierten Namen wie »global::System.Math.PI«.) Wir nennen solch eine Verwendung eines Namens als Ausdruck auch einfach eine Verwendung  des Namens.

Program.cs

public static class Program
{ public static void Main()
{

global::System.Console.WriteLine( global::System.Math.PI );
global::System.Console.WriteLine( 7 );

const int n = 7; /* Festlegung */
global::System.Console.WriteLine( n ); /* Verwendung */ }}

Protokoll
3.14159265358979
7
7

Es können auch andere Datentypen, Name oder Werte verwendet werden, wie auch weitere Beispiele zeigen werden.

In dieser Lektion werden erstmals in diesem Kurse Typangaben wie »int« oder »double« auch bewußt innerhalb eines Programms  eingesetzt. Zuvor traten sie nur in vorgegebenen Rahmen oder der Dokumentation  auf.

Durch die Deklaration »const int n = 7;« wird wird festgelegt, daß im Gültigkeitsbereich  der Deklaration (von der Stelle der Festlegung bis zum Ende des die Deklaration enthaltenden Blocks) der Name »n«

haben soll.

Die Schreiben des Namens an einer Stelle, an der ein Ausdruck erwartet wird, ist eine Verwendung  des Namens. Bei solch einer Verwendung im Gültigkeitsbereich einer Deklaration hat der Name den durch die Deklaration festgelegten Typ und Wert.

C♯ 
const int n = 7;
auf deutsch:
„Festlegung des Namens »n« mit dem Typ »int« und dem Wert »7«“

Ein solcher Name wird auch als eine Konstante  bezeichnet, um zu betonen, daß er einen konstanten (unveränderlichen) Wert besitzt.

Das folgende kürzere Programm zeigt noch einmal isoliert die Festlegung und Verwendung einer Konstanten.

Program.cs

public static class Program
{ public static void Main()
{

const int n = 7; /* Festlegung */
global::System.Console.WriteLine( n ); /* Verwendung */ }}

Typen für eine Konstante

Die folgenden Typen kommen für eine Konstante in Frage:

Typen
int
double
decimal
string
Program.cs

public static class Program
{ public static void Main()
{

const int n = 2;
const double x = 2.3;
const decimal d = 2.3m;
const string s = "abc";

global::System.Console.WriteLine( n );
global::System.Console.WriteLine( x );
global::System.Console.WriteLine( d );
global::System.Console.WriteLine( s );

}}

Protokoll
2
2.3
2.3
abc

Ausgabe des Wertes eines Namens

Das folgende Program zeigt verschiedene Möglichkeiten zur Ausgabe des Wertes eines Namens.

Program.cs

public static class Program
{ public static void Main()
{

const int n = 7;

global::System.Console.WriteLine( "n = "+n+"." );

global::System.Console.WriteLine( $"n = {n}." );

global::System.Console.WriteLine( "n = {0}.", n );

}}

Protokoll
n = 7.
n = 7.
n = 7.

Die Zeichenfolge eines Namens

Mit einem nameof-Ausdruck kann der Bezeichner einer Konstanten als Zeichenfolge ausgedrückt werden.

Program.cs

public static class Program
{ public static void Main()
{

const int n = 7;
global::System.Console.WriteLine( n );
global::System.Console.WriteLine( "n" );
global::System.Console.WriteLine( nameof( n ));
global::System.Console.WriteLine( nameof( n ) + $" = {n}" ); }}

Protokoll
7
n
n
n = 7

Vorteile der Verwendung »nameof« gegenüber »"n"« sind:

Ein Name steht in der Regel für seinen Wert, die Verwendung in »nameof« ist jedoch eine Ausnahme von dieser Regel.

Namen als eine Art von Abkürzung

Das folgende Programm zeigt die Festlegung eines Namens als eine Art von Abkürzung.

Program.cs

public static class Program
{ public static void Main()
{

const string lkw = "Lastkraftwagen";

global::System.Console.WriteLine
( $"Ein {lkw}-Fahrer lebt in seinem Fahrzeug." ); }}

Protokoll
Ein Lastkraftwagen-Fahrer lebt in seinem Fahrzeug.

Man kann sich vorstellen, daß bei der Interpretation des obigen Programms als ein Zwischenschritt der Ausdruck rechts vom Gleichheitszeichen an Stelle des Namens links vom Gleichheitszeichen eingesetzt wird.

Program.cs

public static class Program
{ public static void Main()
{

global::System.Console.WriteLine
( $"Ein {"Lastkraftwagen"}-Fahrer lebt in seinem Fahrzeug." ); }}

Protokoll
Ein Lastkraftwagen-Fahrer lebt in seinem Fahrzeug.

Festlegung eines Namens für die Lichtgeschwindigkeit

Das folgende Programm zeigt die Festlegung eines Namens für den Zahlenwert der Lichtgeschwindigkeit im Vakuum in der Einheit m/s.

Program.cs

public static class Program
{ public static void Main()
{

const int c = 299792458;

global::System.Console.WriteLine
( $"Die Lichtgeschwindigkeit ist gleich {c} m/s." ); }}

Protokoll
Die Lichtgeschwindigkeit ist gleich 299792458 m/s.

Fehlende Festlegungen

Das folgende Programm zeigt das Verhalten einer C♯ -Implementation beim Fehlen einer Festlegung für einen Namen.

Program.cs

public static class Program
{ public static void Main()
{

global::System.Console.WriteLine
( $"Die goldene Zahl ist gleich {g}." ); }}

Protokoll
Program.cs(6,38): error CS0103: The name 'g' does not exist in the current context

Schreibweisen

Für das Fünffache eines Wertes ‹ x › schreibt man in der Mathematik oft ‹ 5x ›, für das Produkt von ‹ x › und ‹ y › schreibt man oft ‹ xy ›.

In C♯  muß für Produkte stets der Multiplikationsoperator »*« verwendet, also »5 * x« beziehungsweise »x * y« geschrieben werden.

Übungsfragen

?   Interpretation einer Festlegung

Ist das folgende Programm korrekt und, wenn ja, was gibt es aus?

Program.cs

public static class Program
{ public static void Main()
{

const int n = 4;

global::System.Console.WriteLine( n + 1 );

global::System.Console.WriteLine( n ); }}

?   Interpretation einer Festlegung (1)

Ist das folgende Programm korrekt und, wenn ja, was gibt es aus?

Program.cs

public static class Program
{ public static void Main()
{

const string s = 4;

global::System.Console.WriteLine( s + 1 ); }}

?   Vervollständigung zu einem Programm

Was gehört an die Stelle der Lücke in dem folgenden Text, damit er als Programm ausgeführt werden kann?

Program.txt

public static class Program
{ public static void Main()
{

const __________ k = "2.3";

global::System.Console.WriteLine( k ); }}

?   Vervollständigung zu einem Programm (1)

Was gehört an die Stelle der Lücke in dem folgenden Text, damit er als Programm ausgeführt werden kann?

Program.txt

public static class Program
{ public static void Main()
{

const double __________ = 5.6;

global::System.Console.WriteLine( x ); }}

?   Vervollständigung zu einem Programm (2)

Was gehört an die Stelle der Lücke in dem folgenden Text, damit er als Programm ausgeführt werden kann und die Zeile »7« ausgibt?

Program.txt

public static class Program
{ public static void Main()
{

const int i = __________;

global::System.Console.WriteLine( i ); }}

?   Interpretation von Festlegungen (2)

Ist das folgende Programm korrekt und, wenn ja, was gibt es aus?

Program.cs

public static class Program
{ public static void Main()
{

const int n = 4;
const int m = n + n;

global::System.Console.WriteLine( n + 1 );
global::System.Console.WriteLine( m + 1 ); }}

?   Interpretation von Festlegungen (3)

Ist das folgende Programm korrekt und, wenn ja, was gibt es aus?

Program.cs

public static class Program
{ public static void Main()
{

const int n = 2;
const double x = n / 4;

global::System.Console.WriteLine( n );
global::System.Console.WriteLine( x ); }}

?   Beurteilung von Programmen

Die beiden folgenden Programme kommen zum selben Ergebnis. Welches gefällt Ihnen besser? Warum?

Program.cs

public static class Program
{ public static void Main()
{

const double laengeInZentimetern = 2.0;
const double zentimeterInMillimetern = 10.0;
const double laengeInMillimetern = laengeInZentimetern * zentimeterInMillimetern;

global::System.Console.WriteLine( laengeInMillimetern ); }}

Protokoll
20
Program.cs

public static class Program
{ public static void Main()
{

global::System.Console.WriteLine( 2.0 * 10.0 ); }}

Protokoll
20

?   Interpretation einer Festlegung (4) *

Ist das folgende Programm korrekt und, wenn ja, was gibt es aus?

Program.cs

public static class Program
{ public static void Main()
{

const int x = 4;

global::System.Console.WriteLine( global::System.Math.Abs( x )); }}

?   Interpretation einer Festlegung (5) *

Ist das folgende Programm korrekt und, wenn ja, was gibt es aus?

Program.cs

public static class Program
{ public static void Main()
{

const double x = 2.7;

global::System.Console.WriteLine
( global::System.Char.ConvertFromUtf32( x )); }}

Übungsaufgaben
Übung

/   Verdoppeln einer Zahl

Schreiben Sie in das folgende Programm an die Stelle von "/* ... */" einen Ausdruck, so daß der Wert des Namens »dasDoppelte« das Doppelte des Wertes des Namens »zahl« beträgt! Falls die Deklaration »const int zahl = 4;« später in »const int zahl = 5;« verändert wird, soll der Wert von »dasDoppelte« sich automatisch anpassen (und dann »10« betragen).

Program.cs

public static class Program
{ public static void Main()
{

const int zahl = 4;

const int dasDoppelte = /* ... */;

global::System.Console.WriteLine( dasDoppelte ); /* sollte zunaechst 8 ausgeben */

}}

/   Deklaration einer Konstanten, 0

Schreiben Sie ein C♯ -Programm, in welchem in einem Block eine Konstante vom Typ »int« mit dem Namen »i« und dem Wert »2« deklariert wird. Das Programm soll dann den Wert dieser Konstanten ausgeben. (Das Programm soll nichts anderes enthalten oder tun.)

Reserveaufgaben

/   Deklaration einer Konstanten, 1

Hinweis für den Dozenten  ► Diese Reserveaufgabe nur bei Bedarf und erst nach der Nachbesprechung der vorherigen Aufgabe gestellt werden.

Schreiben Sie ein C♯ -Programm, in welchem in einem Block eine Konstante vom Typ »double« mit dem Namen »x« und dem Wert »4.8« deklariert wird. Das Programm soll dann den Wert jener Konstanten ausgeben. (Das Programm soll nichts anderes enthalten oder tun.)

/   Deklaration einer Konstanten, 2

Hinweis für den Dozenten  ► Diese Reserveaufgabe nur bei Bedarf und erst nach der Nachbesprechung der vorherigen Aufgabe gestellt werden.

Schreiben Sie ein C♯ -Programm, in welchem in einem Block eine Konstante vom Typ »string« mit dem Namen »s« und dem Wert »"abc"« deklariert wird. Das Programm soll dann den Wert jener Konstanten ausgeben. (Das Programm soll nichts anderes enthalten oder tun.)

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 stefanram723501 stefan_ram:723501 Festlegung und Verwendung von Wertnamen in C# Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723501, slrprddef723501, 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/wertnamenfestlegungen_csharp