変数の宣言とフィールドの宣言の概要(Delphi)

提供: RAD Studio
移動先: 案内検索

アプリケーションのリファクタリング:インデックス への移動

リファクタリング機能を使用して、変数やフィールドを作成できます。 この機能を利用すると、事前に計画していなくてもコーディング中に、変数やフィールドを作成して宣言できます。 このトピックでは、次の情報について説明します。


変数の宣言 - Shift+Ctrl+V

手続きブロックのスコープ内に、未宣言の識別子が存在する場合は、変数を作成できます。 この機能を利用すると、未宣言の識別子を選択し、簡単なメニュー選択またはキーボード ショートカットを利用して、新規の変数宣言を作成できます。 [変数の宣言]ダイアログを起動すると、このダイアログには、選択されている識別子に応じて、お勧めの変数名が表示されます。 この変数に別の名前を付ける選択をした場合は、変数は正常に作成されますが、未宣言の識別子シンボル(エラー インサイトの下線付き)はそのまま残ります。

変数名は、識別子用の言語規則に従う必要があります。 Delphi では、変数名は次の規則に従う必要があります。

  • キーワードと同じではいけない。
  • スペースを含んではいけない。
  • 予約語(ifbegin など)と同じではいけない。
  • Unicode のアルファベット文字またはアンダースコアで始まらなければならない。ただし、変数名の内部には、Unicode の英数字やアンダースコアを含めることができる。
  • Delphi 言語では、型名をキーワード string にすることもできます。


メモ: 変数の宣言を選択したときに表示されるダイアログでは、その変数の初期値を設定するかどうかを指定できます。

初期の型の提示

リファクタリング エンジンは、これから作成しようとする変数の型を提案します。 リファクタリング エンジンは、選択されているステートメントの 2 項演算を評価して、子オペランドの合計の型を、新規変数の型として使用します。 たとえば、次のコードを考えます。

myVar := x + 1;

リファクタリング エンジンは、与えられた x が Integer なので、新規変数 myVar を Integer 型に設定するものと自動的に仮定します。

通常、リファクタリング エンジンは、ステートメントを評価することによって、型を推測できます。 たとえば、If foo Then... ステートメントは、foo が Boolean であることを暗黙のうちに示しています。 If (foo = 5) Then... の例では、式の結果は Boolean になります。 それにもかかわらず、この式は、序数(5)と未知の型(foo)の比較です。 この 2 項演算は、foo が序数でなければならないことを示しています。

フィールドの宣言 - Shift+Ctrl+D

クラスのスコープ内に、未宣言の識別子が存在する場合は、フィールドを宣言できます。 [変数の宣言...]機能と同様に、コード内に作成したフィールドをリファクタリングできます。リファクタリング エンジンは、フィールドの宣言を適切な場所に作成します。 この操作を正常に実行するには、そのフィールドが、親となるクラスのスコープ内に存在していなければなりません。 これを実現するには、そのクラス自体の内部にフィールドをコーディングするか、フィールド名の前にオブジェクト名(そのフィールドのコンテキストを提供する)を付加する必要があります。

フィールドを宣言する際のルールは、変数を宣言する際のルールと同じです。

  • キーワードと同じではいけない。
  • スペースを含んではいけない。
  • 予約語(ifbegin など)と同じではいけない。
  • Unicode のアルファベット文字またはアンダースコアで始まらなければならない。ただし、フィールド名の内部には、Unicode の英数字やアンダースコアを含めることができる。
  • Delphi 言語では、型名をキーワード string にすることもできます。

メモ: .NET では、アンダースコアで始まる識別子は、システム用に予約されています。

フィールドの可視性を選択できます。 private または strict private 以外の可視性を選択した場合、リファクタリング エンジンは、次の操作を実行します。

  • 子クラスをすべて検索する。
  • 各子クラスのフィールド名を検索する。
  • フィールド名が、子孫クラスのフィールド名と衝突する場合は、赤いエラー項目を表示する。
  • フィールド名が、既存の項目名と衝突する場合は、リファクタリングは適用できない。

リファクタリング サンプル

次の例は、リファクタリング機能を使用して、変数とフィールドの宣言を行う様子を示しています。

以下のコードについて考えてみましょう。

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

implementation

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

[フィールドの宣言...]リファクタリングを適用すると、 結果は次のようになります。

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

代わりに、[変数の宣言...]リファクタリングを適用すると、結果は次のようになります。

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

関連項目