−トップへ−

条件分岐@ ( if )

 条件分岐は,ある状態や変数の値などによって,次に行う処理を変えることができる制御文です。
 ここでは,( if )を使った条件分岐の方法を紹介します。基本的な使い方は以下の通りです。

  if (式) then (処理) ;

 これは,(式)が真ならば(処理)を行い,(式)が偽ならば(処理)を行わない,という意味です。
 (式)が偽のとき,別の処理を行いたいときは,以下のように記述します。

  if (式) then (処理A) else (処理B);

 これは,(式)が真ならば (処理A) を行い,式が偽ならば(処理B)を行う,という意味になります。

 これを実際に試してみたいと思います。
 まず,フォームにボタンコンポーネントを貼り付け,[OnClick]イベントを呼び出してください。呼び出したらその中に次のように記述してください。

procedure TForm1.Button1Click( Sender : TObject );
begin
  if form1.Color = clred then form1.Color := clwhite else form1.color := clred ;
end ;

 これは,もし[form1]の色が赤なら[form1]の色を白にして,[form1]の色が赤でないなら[form1]の色を赤にする,という意味になります。これを一行に書くとわかりにくいので,改行して次のように書くのが一般的です。

procedure TForm1.Button1Click( Sender : TObject );
begin
  if form1.Color = clred then
    form1.Color := clwhite
  else
    form1.color := clred;
end;

 ここで,「=」と「:=」の記号の違いについて確認しておきます。「=」は左右のものが同じかどうかを比較するときに使い,「:=」は左の変数などに右の数値などを代入するときに使います。
 「Visual Basic」では,数値を代入するときにも「=」を使っていたと思いますが,Pascal言語では,比較と代入のときの記号を区別しています。

 今までの書式は,それぞれの場合で処理できるのは1つだけでしたが,場合によっては複数の処理をしたいことがあります。その場合は下のような書式を使います。

procedure TForm1.Button1Click( Sender : TObject );
begin
  if (式) then
    begin
      (処理A);//;がついている
      (処理B);
    end//;がついていない
  else
    begin
      (処理A);
      (処理B);
    end ;//;がついている
end ;

 上の書式では,「then」と「else」の間に,「begin 〜 end」というものがあります。この「begin 〜 end」の間はいくつでも処理をかくことができます。

 ここで,「;」について説明します。この「;」は文の終わりを宣言する記号です。もともと「if」の構文は1つの文なので,それまでの文例では,文の最後に1つだけ「;」がついています。上の文例でも基本的に1つの文なので,一つ目の「begin 〜 end」の「end」のあとには「;」はつきません。しかし下の「begin 〜 end」の「end」は「if」構文の終わりを宣言するために「;」がついています。
 「begin 〜 end」の中には複数の文が入りますが,ここに入るのは文なので,それぞれの文の終了を宣言するために「;」をつけます。

 上の書式を使って,ソースコードを書いてみます。
 今度はフォームのボタンを押すことで,フォームの色を緑→黄色→赤→緑…と順番に変わるようにしたいと思います。準備としてフォームにボタンコンポーネントとラベルコンポーネントを貼り付け,ボタンコンポーネントの[OnClick]イベントを呼び出してください。次に[OnClick]イベントの中に次のように記述してください。

procedure TForm1.Button1Click( Sender : TObject );
begin
  if form1.color = cllime then
    begin//色が緑色のときの処理
      form1.color := clyellow ;
      label1.caption := '黄色' ;
    end
  else
    begin
      if form1.Color = clyellow then
        begin//色が緑色でなく黄色のときの処理
          form1.Color := clred ;
          label1.caption := '赤色' ;
        end
      else
        begin//色が緑色でなく黄色でもないときの処理
          form1.Color := cllime ;
          label1.Caption := '緑色' ;
        end
    end ;
end ;

 上の記述のように,「begin 〜 end」の間にはどんな文章を書いてもよいので,「if」構文を重ねて使うこともできます。
 また上の記述を見ていると,「begin」に対応する「end」がどこにあるかわかりにくくなることがあります。そこで,「begin」を記述したらすぐに「end」を記述する習慣を付けてください。そして「begin 〜 end」の間の文は,「begin」より字下げして記述するようにしてください。

私事ですが…

 以前,対戦型のゲームで,コンピュータの次の一手のソースコードを書いているときには,「if」構文を6回以上重ねて使うこともありました。そのとき,上のように記述すると,どの階層なのかわかりずらくなるので,下のように書いていました。

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (式) then begin
    (処理A);
    (処理B);
  end else begin
    (処理A);
    (処理B);
  end ;
end ;

 この形式で,上の記述を書いてみると,

procedure TForm1.Button1Click( Sender : TObject );
begin
  if form1.color = cllime then begin
    form1.color := clyellow ;
    label1.caption := '黄色' ;
  end else begin
    if form1.Color = clyellow then begin
      form1.Color := clred ;
      label1.caption := '赤色' ;
    end else begin
      form1.Color := cllime ;
      label1.Caption := '緑色' ;
    end ;
  end ;
end ;

 このように書くと階層がわかりやすくなり,迷うことが少なくなりました。これは自己流ですが,このサイトの中でも無意識に記述することがあると思います。そのときはご了承ください。

−トップへ−