元のPascal言語は、プログラミング言語で一般的に見られるいくつかの単純な概念に基づいて構築されました。最も重要な概念はデータ型です。データ型は、変数が取ることができる値と、これらの値に対して実行できる操作を決定します。Pascalデータ型の概念は、C言語や初期のBASIC言語よりも強力です。C言語では、算術データ型は交換可能ですが、初期のBASIC言語のデータ型に似た概念はありません。
キーワード変数
Pascal変数は、使用する前に宣言する必要があり、変数を宣言するときにデータ型を指定する必要があります。以下は、変数宣言の例です。
var
Value: Integer;
IsCorrect: Boolean;
A, B: Char;
(1)キーワードvarは多くの場所で使用でき、関数またはプロシージャの先頭に配置して、関数またはプロシージャのローカル変数を宣言できます。また、ユニットに配置してグローバル変数を宣言することもできます。
(2)varキーワードが変数名のリストになった後、各変数名の後にコロンとデータ型名が続きます。上記の例の最後の文のように、複数の変数を1行で宣言できます。
(3)変数タイプを指定すると、その変数に対しては、変数タイプでサポートされている操作のみを実行できます。たとえば、判定演算でブール値を使用し、数式で整数値を使用する場合、ブール値と整数値を混在させることはできません(これはC言語で可能です)。
変数の割り当て
単純な代入ステートメントを使用して、次のコードを記述できます。
Value := 10;
IsCorrect := True;
ただし、2つの変数のデータ型が異なるため、次のステートメントは正しくありません。
Value := IsCorrect; // error
Delphiでこのコードをコンパイルすると、次のエラーメッセージが表示されます。互換性のないタイプ:「整数」および「ブール」(互換性のないタイプ:「整数」および「ブール」)。TrueまたはFalse値を整数変数に割り当てることには意味がありません。
初期値
いわゆる初期値は、変数が最初に宣言されたときに変数に割り当てられた値です。Delphiのグローバル変数にはデフォルトの初期値があり、それらの初期値は一般にタイプに関連していることに注意することが重要です。
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
var
Num: Integer;
begin
Writeln(Num);
Readln;
end.
上記の場合、Num変数はグローバル変数であり、型は整数であるため、その初期値は0です。もちろん、グローバル変数は、次のコードのように、宣言されたときに直接初期値を割り当てることもできます。
uses
System.SysUtils;
var
Num: Integer=10;
begin
Writeln(Num);
Readln;
end.
宣言時にローカル変数を割り当てることはできません。同時に、ローカル変数にはデフォルトの初期値がありません。ローカル変数が初期化されて割り当てられていない場合、システムは意味のないランダムな値を返します。したがって、を使用する場合ローカル変数、最初の参照推奨は割り当て操作です
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
procedure Show ();
var
Num: Integer;
begin
//此处打印输出Num的值为一个随机的整数
Writeln(Num);
end;
begin
Show();
Readln;
end.
これが、ローカル変数を定義するときに常に0またはnilの値を割り当てる必要がある理由です。
キーワードconst
プログラムの実行中に変更されないままの値の場合、Pascalでは定数宣言が許可されます。定数の宣言には特定のデータ型は必要ありませんが、初期値を割り当てる必要があります。コンパイラは、割り当てられた初期値に従って適切なデータ型を自動的に選択します。例えば:
const
Thousand = 1000;
Pi = 3.14;
AuthorName = 'Marco Cantù';
Delphiは、定数の値に基づいてデータ型を決定します。上記の例のThousand変数の場合、DelphiはSmallIntデータ型(短整数-Thousand変数に対応できる最小の整数型)を使用します。Delphiに特定の型を使用するように指示する場合は、次のように、宣言に型名を追加できます。
const
Thousand: Integer = 1000;
有名な定数の場合、コンパイラには2つのコンパイルオプションがあります。
(1)定数にメモリを割り当て、定数の値をメモリに入れます
(2)定数を使用するたびに定数値をコピーします。2番目の方法は、単純な定数に適しています。
定数は読み取り専用変数とも呼ばれます。つまり、定数は読み取りのみが可能で、書き込みはできません。つまり、定数の値は変更できません。
リソース文字列定数
私の理解では、このタイプの定数はプログラムのリソースデータとして扱われます。たとえば、文字列定数を定義する場合、次のように記述できます。
const
AuthorName = 'Marco Cantù';
Delphi 3から、別の方法で書くことができます。
resourcestring
AuthorName = 'Marco Cantù';
上記の2つのステートメントは両方とも定数を定義します。つまり、プログラムの実行中に変更されない値を定義しますが、2つの実装プロセスは異なります。** resourcestring **命令で定義された文字列変数は保存されます。 toプログラムリソースの文字列テーブル内。
例:ボタンが設定されている場合、対応するコードは次のとおりです。
resourcestring
AuthorName = 'Marco Cantù';
BookName = 'Essential Pascal';
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage (BookName + #13 + AuthorName);
end;
上記のコードの2つの文字列は、改行#13で区切られているため、出力されて2行で表示されます。
リソースエディタで実行可能ファイルを開くと、プログラムリソースで定義した文字列が表示されます。これは、文字列がコンパイルされたコードを入力しないが、実行可能ファイル(EXEファイル)の別の領域に保存されることを意味します。
つまり、リソースを使用する利点により、Windowsは効果的なメモリ処理を完了できます。一方、プログラムはソースコードを変更せずにローカライズ(文字列を異なる言語に変換)できます。