「もし状況が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;