文字列とは、その名の通り"文字"の"列"という意味です。 つまり、文字( 1 文字 )が列をなして並んでいるものを"文字列"と 呼ばれているのだと、最初は考えてください。
例えば、 はじめに では、"Hello world" とメッセージボックスを表示させるプログラムを 書きました。ここでは、もう少し発展させて、いろいろなメッセージを 表示させるプログラムを書いてみましょう。
変数とは、何かを入れる"入れ物"だと考えてください。
例えば、"こんにちは"という文字列があったとします。この"こんにちは"という 文字列をいろいろな場所で使用したい場合、つまり何度も参照する必要があるなら 、"こんにちは"という文字列に名前を付ける事ができたら 便利ですよね。 また、整数同士の足し算や引き算の計算結果を一時的に保持して おかなければならない場合、一時の"保管場所" として、 変数を利用することが出来ます。
変数を使用するには、変数の宣言 というものが必要です。 といっても、そんなに難しいことではありません。単に 利用する変数の名前と、その変数の型を指定するだけで OK です。
まずは、試しにプログラムを書いてみましょう。
procedure TForm1.Button1Click(Sender: TObject); var s: string; // 文字列型の変数 s を宣言 begin s := 'Delphi'; // s に文字列 "Delphi" を代入 ShowMessage(s); // 'Delphi' end;
このプログラムでは、s という名前を持ち、 string という型を持つ変数を宣言 しています(string が、文字列型を意味していると捉えてください)。 そして、とても大事な事なのですが、変数を宣言するには、 「これから変数を宣言します」という意味で使われる var という命令が 必要です。
var // 「変数の宣言をしますよ」という指令をするために必要 s: string;
この var を忘れてはいけません。
s := 'Delphi';
ここでは s に 'Delphi' という文字列を 代入しています。また、このことから分かりますように、'(シングルクォート)で囲まれたものが 文字列として扱われます。
変数として宣言されたもの(ここでは s)は、それ以降に続く begin と end の 間で、自由に利用する事が出来ます。
procedure TForm1.Button1Click(Sender: TObject); var s: string; begin // s は、 begin と end; の間でのみ使用可能です。 end;
上記のような変数 s は, ローカル変数 と呼ばれています。これとは別にグローバル変数というものも存在します(グローバル変数は、後の解説で登場します)。
ShowMessage(s);
そして ShowMessage 関数に s を引数として渡し、メッセージを表示させています。 (関数の説明も後に登場します)
もう少し、いろいろなメッセージを表示させて見ましょう。
procedure TForm1.Button1Click(Sender: TObject); var s: string; begin s := 'こんにちは'; ShowMessage(s); // 'こんにちは' s := 'Hello!'; ShowMessage(s); // 'Hello!' s := 'Borland Delphi'; ShowMessage(s); // 'Borland Delphi' end;
また、変数はいくつでも宣言する事が出来ます。
procedure TForm1.Button1Click(Sender: TObject); var s, MyMessage: string; begin s := 'こんにちは'; ShowMessage(s); // 'こんにちは' MyMessage := 'Hello world'; ShowMessage(MyMessage); // 'Hello world' end;
変数名は、どんなに長くなっても OK です。ただし変数名の先頭に数字を 使用することは出来ません。
さて、変数の使い方が分かりましたので、文字列についてもう少し詳しく 見ていきましょう。
文字列とは、先ほども言いましたが、単なる"文字の列"です。 ですから、1 文字 1 文字が整列して並んでいる状況を考えていただければ 分かりやすいと思います。
ただの文字の列ということが分かれば、文字列同士の足し算は、 単なる文字列と文字列をつなぎ合わせたものだというのが理解できると思います。
procedure TForm1.Button1Click(Sender: TObject); var s1, s2: string; begin s1 := 'Borland '; ShowMessage(s1); // 'Borland ' s2 := s1 + 'Delphi' ShowMessage(s2); // 'Borland Delphi' end;
s1, s2 という 2 つの変数を使用しています。s1 には 'Borland' という文字列を代入し、s2 には s1 と文字列 'Delphi' の足し算を行っています。s1 には 'Borland' という文字列が代入されていますので、結果として s2 には 'Borland Delphi' という文字列が代入されるという仕組みです。
また、var 節では s1 と s2 の間に , (カンマ)があることが分かります。 これは、以下の書き方の簡易法と捉えてください。
var s1: string; s2: string;
つまり、複数の変数を宣言したい時、その宣言される変数が同じ型である場合には、 カンマを用いて変数の宣言ができるということです。少し、例を見てみましょう。
var s1, s2, s3: string; // s1, s2, s3 は string 型の変数 value1, value2: Integer; // value1, value2 は Integer 型の変数
文字列の説明に戻ります。
変数に代入された文字列の中の任意の文字にアクセスすることが 出来ます。その場合、添え字を用いて、特定の文字 ( 1 文字 ) にアクセスします。
procedure TForm1.Button1Click(Sender: TObject); var s: string; begin s := 'Delphi'; // 添え字を使用します ShowMessage(s[1]); // 'D' ShowMessage(s[2]); // 'e' ShowMessage(s[3]); // 'l' ShowMessage(s[4]); // 'p' ShowMessage(s[5]); // 'h' ShowMessage(s[6]); // 'i' end;
添え字は必ず 1 番目から始まることに注意してください。0 番目にはアクセスできません(コンパイルエラーとなります)。
また Length 関数を利用すると「文字列の長さ」を取得する事が出来ます。
procedure TForm1.Button1Click(Sender: TObject); var s: string; len: Integer; begin s := 'Delphi'; len := Length(s); // 文字の長さを取得 // len には 6 が格納されます ShowMessage('長さは ' + IntToStr(len) + ' です'); end;
新たに、len という名前の Integer 型の変数を宣言しています。 Integer 型というのは整数を格納できる型です。ですから Integer 型の 変数 len には整数を代入する事が出来ます。
Length 関数は、引数として文字列を与えますと、結果としてその文字列の長さを 返してくれます(関数についての詳しいことは、これ以降で出てきます)。