「もし状況がAだったら処理Xを実行し、もし状況がBだったら処理Yを実行する」
このように、状況に応じて処理を選択する手法を条件分岐と呼びます。
if…then…else
もっともよく使われる条件判断です。次の点に注意します。
- elseの前の文末にはセミコロンをつけない
- 条件が満たされたときに実行される処理を、begin..end ブロックで囲む
- ifの後の式(論理式)が複数の場合は、カッコ()でくくる
【構文】
if <式> then <文1> else <文2>
【例】
if 論理式 then begin 文 文 ... end;
【サンプルプログラム】
implementation
{$R *.dfm}
var
intFlg : Integer;//ユニット内変数の宣言
procedure TForm1.Button1Click(Sender: TObject);
begin
if intFlg = 0 then //変数intFlgが0のとき
begin
Form1.Color := ClBlack;//フォームが黒色
intFlg := 1; //intFlgに1を代入
end //elseの直前なのでセミコロンはつけない
else //intFlgが0以外のとき
begin
Form1.Color := ClWhite;//フォームが白色
intFlg := 0; //intFlgに0を代入
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
intFlg := 0; //変数の初期化
end;
end.
【実行結果】 ボタンをクリックするごとに色が切り替わります
case文
- 複数の条件を指定する場合、if文でも分岐することはできますが、case文を使うほうがプログラムが読みやすくなります。
- 条件が満たされたときに実行する処理を、begin…endブロックで囲みます。
※ブロック内の処理が1文だけのときにはbegin…endブロックで囲む必要はありません。 - case文を使う場合は、elseの直前の文にもセミコロンが必要です。
【書式】
case <式> of 値1: ...文1; 値2: ...文2; ... else ...それ以外の処理; end;
【サンプル】
//性別をチェックする
case RadioGroup1.ItemIndex of
0 : sex := male;
1 : sex := female;
else
ShowMessage('性別を入力してください');
end;
【サンプル】
procedure TForm1.Button1Click(Sender: TObject);
var
intNo : integer; //Editコンポーネントに入力された値
strMsg : String[10];//メッセージボックスに表示する文字
begin
intNo := StrToint(Edit1.Text);//Editコンポーネントの値を代入(整数に変換)
case intNo of
3..5 : begin
strMsg :='春';
ShowMessage(strMsg);
end;
6..8 : begin
strMsg :='夏';
ShowMessage(strMsg);
end;
9..11 : begin
strMsg :='秋';
ShowMessage(strMsg);
end;
12,1,2 :begin//12..2のように指定すると下限が上限を超えるのでエラーになる
strMsg :='冬';
ShowMessage(strMsg);
end;
else
begin
strMsg :='エラー';
ShowMessage(strMsg);
end;
end;
end;


