Überblick zum Deklarieren von Variablen und Feldern (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Refactoring von Anwendungen - Index

Sie können mit Hilfe des Refactorings Variablen und Felder erstellen. Auf diese Weise lassen sich Variablen und Felder während der Programmierung ohne Vorausplanung deklarieren. Dieses Thema enthält Informationen zu folgenden Bereichen:


Variable deklarieren – (Umschalt+Strg+V)

Sie können für einen nicht deklarierten Bezeichner innerhalb des Gültigkeitsbereichs eines Prozedurblocks eine Variable erstellen. Sie müssen den Bezeichner dazu lediglich auswählen und einen Menübefehl aufrufen bzw. eine Tastenkombination drücken. Wenn Sie das Dialogfeld Variable deklarieren öffnen, enthält es einen Vorschlag für den Variablennamen, der auf Ihrer Auswahl basiert. Falls Sie der Variable einen anderen Namen zuweisen, wird dies zwar ausgeführt, das Symbol für einen nicht deklarierten Bezeichner wird jedoch weiterhin angezeigt (Fehlermarkierung durch Unterstreichung).

Variablennamen müssen den Sprachregeln für Bezeichner entsprechen. In Delphi gelten für Variablennamen folgende Regeln:

  • Der Name darf kein Schlüsselwort sein.
  • Der Name darf keine Leerzeichen enthalten.
  • Der Name darf kein reserviertes Wort wie if oder begin sein.
  • Der Name muss mit einem alphabetischen Unicode-Zeichen oder einem Unterstrich beginnen und kann alphanumerische Unicode-Zeichen oder weitere Unterstriche enthalten.
  • In Delphi kann das Schlüsselwort string als Typname verwendet werden.


Hinweis: Im Dialogfeld zur Variablendeklaration können Sie einen Anfangswert für die Variable festlegen.

Vorschlag für den Variablentyp

Die Refactoring-Engine schlägt einen Typ für die zu erstellende Variable vor. Dazu wertet sie binäre Operationen für die ausgewählte Anweisung aus und verwendet den Typ der Summe der untergeordneten Operanden als Typ für die neue Variable. Betrachten Sie z. B. die folgende Anweisung:

myVar := x + 1;

Die Refactoring-Engine geht automatisch davon aus, dass die neue Variable myVar den Typ Integer haben soll, wenn x ein Integer-Wert ist.

Oft kann die Refactoring-Engine den Typ durch die Auswertung einer Anweisung ableiten. Beispielsweise impliziert die Anweisung If foo Then..., dass foo ein Boolean Typ ist. Bei der Anweisung If (foo = 5) Then... ergibt die Auswertung den Typ Boolean, obwohl es sich hier um den Vergleich einer Ordinalzahl (5) mit einem unbekannten Typ (foo) handelt. Die binäre Operation zeigt an, dass foo ein Ordinalwert sein muss.

Feld deklarieren – (Umschalt+Strg+D)

Sie können für einen nicht deklarierten Bezeichner innerhalb des Gültigkeitsbereichs einer Klasse ein Feld deklarieren. Ähnlich wie eine Variable kann auch ein Feld im Quelltext mittels Refactoring deklariert werden. Die Refactoring-Engine generiert die Felddeklaration automatisch an der richtigen Stelle. Voraussetzung für den Erfolg der Operation ist, dass sich das Feld innerhalb des Gültigkeitsbereichs seiner übergeordneten Klasse befindet. Zu diesem Zweck können Sie das Feld innerhalb der Klasse erstellen oder seinem Namen den Namen des Objekts voranstellen, das den Kontext für das Feld bereitstellt.

Hinsichtlich des Namens gelten bei der Felddeklaration dieselben Regeln wie für Variablen:

  • Der Name darf kein Schlüsselwort sein.
  • Der Name darf keine Leerzeichen enthalten.
  • Der Name darf kein reserviertes Wort wie if oder begin sein.
  • Der Name muss mit einem alphabetischen Unicode-Zeichen oder einem Unterstrich beginnen und kann alphanumerische Unicode-Zeichen oder weitere Unterstriche enthalten.
  • In Delphi kann das Schlüsselwort string als Typname verwendet werden.

Hinweis: In .NET sind Bezeichner, die mit einem Unterstrich beginnen, für Systemzwecke reserviert.

Sie können eine Sichtbarkeit für das Feld festlegen. Wenn Sie eine andere Sichtbarkeit als private oder strict private wählen, führt die Refactoring-Engine folgende Operationen durch:

  • Suchen nach allen untergeordneten Klassen.
  • Durchsuchen jeder untergeordneten Klasse zur Bestimmung des Feldnamens.
  • Anzeigen eines roten Fehlersymbols, wenn der Feldname zu einem Konflikt mit einem Feld in einer abgeleiteten Klasse führt.
  • Das Refactoring ist nicht möglich, wenn ein Konflikt mit einem vorhandenen Elementnamen auftritt.

Refactoring-Beispiele

Die folgenden Beispiele zeigen, was geschieht, wenn Variablen und Felder mit der Refactoring-Funktion deklariert werden.

Sehen Sie sich den folgenden Quelltext an:

TFoo = class
private
  procedure Foo1;
end;
...

implementation

procedure TFoo.Foo1;
begin
  FTestString := 'test';    // refactor TestString, assign field
end;

Angenommen, Sie deklarieren ein Feld mittels Refactoring. Sie erhalten dann folgendes Ergebnis:

TFoo = class
private
  FTestString: string;
  procedure Foo1;
end;

Wenn Sie stattdessen eine Variable deklarieren, lautet das Ergebnis:

procedure TFoo.Foo1;
var                            // added by refactor
  TestString: string;    // added by refactor
begin
  TestString := 'test';     // added by refactor
  TestString := 'whatever';
end;

Siehe auch