Lokale Konstanten

Lokale Konstanten (Local Constants)

Lokale Konstanten ähneln lokalen Variablen sehr stark, der entscheidende Unterschied: Nach der Initialisierung kann ihr Wert nicht mehr verändert werden.

Genau wie lokale Variablen müssen Konstanten innerhalb eines Codeblocks deklariert werden.

Zwei zentrale Merkmale von Konstanten:

  1. Sie müssen direkt bei der Deklaration einen Anfangswert erhalten;
  2. Nach der Deklaration ist eine Änderung des Wertes unzulässig.

Grundsyntax für Konstanten

const Typ Konstantenname = Anfangswert;

// const: Schlüsselwort, muss unmittelbar vor dem Typ stehen
// = Anfangswert: darf nicht weggelassen werden, ist zwingend erforderlich
Code-Sprache: JavaScript (javascript)

Erläuterung der Syntaxregeln

Gegenüber gewöhnlichen Feld- oder Variablendeklarationen gibt es zwei Unterschiede:

  1. Vor dem Datentyp steht das Schlüsselwort const;
  2. Ein Anfangswert ist erforderlich, dieser Wert muss bereits zur Kompilierzeit feststehen:
    • Üblicherweise Literale von Basistypen oder Ausdrücke, die aus Basistypen aufgebaut sind;
    • Die Zuweisung von null ist gestattet;
    • Es können keine Objektinstanzverweise zugewiesen werden (Objektverweise werden erst zur Laufzeit ermittelt und erfüllen nicht die Bedingung einer Kompilierzeitkonstante).

class Program
{
    static void Main()
    {
        int a = 10; // das ist eine Variable

        const int b = 20; // das ist eine Konstante, sieht einer Variable ähnlich
                          // das Schlüsselwort const kennzeichnet diesen Wert als Konstante

        a = 100; // Variablen lassen sich überschreiben
        a = 200; // beliebig oft ändern

        // Fehler
        b = 300; // Konstanten können nicht verändert werden, der Compiler gibt einen Fehler aus

        // Konstanten verbessern Lesbarkeit und Wartbarkeit des Codes

        
        int c; // Deklaration
        c = 12; // Bei Variablen ist getrennte Deklaration und Zuweisung erlaubt

        // Bei Konstanten ist eine Trennung von Deklaration und Initialisierung verboten
        // Fehler
        const double d; // nur Deklaration
        d = 3.14; // funktioniert bei Variablen, nicht bei Konstanten
    }
}Code-Sprache: C# (cs)

Die beiden gezeigten Fehler haben unterschiedliche Gründe: Der erste Versuch ändert den Wert einer Konstante, der zweite trennt Deklaration und Initialisierung. Bei Konstanten müssen beide Schritte gleichzeitig erfolgen.

Kann ein Klassenobjekt als Konstante verwendet werden?

Der Ausdruck, der der Konstante phone zugewiesen wird, muss eine Kompilierzeitkonstante sein.

new Phone() reserviert Heap-Speicher und erstellt ein Objekt erst während der Programmausführung, es handelt sich also um einen Laufzeitwert.

In C# ist es nicht erlaubt, Laufzeit-Objektverweise lokalen const-Konstanten zuzuweisen. Das führt direkt zum Compilerfehler CS0133.

class Program
{
    static void Main()
    {
        const Phone phone = new Phone();
    }
}

class Phone
{

}Code-Sprache: C# (cs)

Zusatz zum Schlüsselwort

const ist kein Modifikator, sondern ein fester Bestandteil der Deklarationssyntax und muss direkt vor dem Datentyp notiert werden.

Schlüsselwörter wie private, public und protected zählen zu den eigentlichen Modifikatoren.

Gültigkeitsbereich – Regeln und Beispiel

Lokale Konstanten folgen genau denselben Gültigkeitsbereichsregeln wie lokale Variablen: Wird sie innerhalb einer Methode oder eines Codeblocks deklariert, verliert sie nach Ende des Blocks ihre Gültigkeit.

void ShowArea()
{
    const double PI = 3.1416; // Deklariere lokale Konstante PI
    for (int radius = 1; radius <= 5; radius++) // Kreisflächen für Radien 1 bis 5 ausgeben
    {
        double area = radius * radius * PI; // Wert der Konstante PI verwenden
        Console.WriteLine($"Radius: {radius}, Fläche: {area}");
    }
}
Code-Sprache: C# (cs)

Die Konstante PI ist nur innerhalb der Methode ShowArea verfügbar und wird nach Ausführung der Methode verworfen.


class Program
{
    static void Main()
    {
        ShowArea();
    }

    static void ShowArea()
    {
        const double PI = 3.1416; 
        for (int radius = 1; radius <= 5; radius++) 
        {
            double area = radius * radius * PI;
            Console.WriteLine($"Radius: {radius}, Area: {area}");
        }
    }

}
Code-Sprache: C# (cs)
Gültigkeitsbereich der Konstante PI (roter Bereich). Wie bei Variablen ist er auf die geschweiften Klammern des übergeordneten Blocks beschränkt; der übergeordnete Block von PI ist der Methodenrumpf.

Lokale Konstanten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert