今回は複数の文を書いたり命令を条件で分岐させたりしてみたいと思います。とことん「ShowMessage」しまくります。
いままではShowMessage('うんちゃらほげほげ')
といった感じで1つの文しか書いていませんでしたので、複数の文を書いてみたいと思います。
まず、今まで書いていたような文をただ羅列してみましょう。表示する内容はどうでもいいです。
procedure TForm1.button1Click(Sender: TObject);
begin
ShowMessage('あなたのなまえはなんですか?')
ShowMessage('…');
ShowMessage('黙ってないで答えて下さいよ…')
end;
実行すると、「演算子またはセミコロン(;)が不足しています」とかなんとか表示されると思います。セミコロンが不足しているようなので、行末にセミコロンを書いてみましょう。
procedure TForm1.button1Click(Sender: TObject);
begin
ShowMessage('あなたのなまえはなんですか?');
ShowMessage('…');
ShowMessage('黙ってないで答えて下さいよ…');
end;
なぜ最後にセミコロン(;)を書いたのかというと、Delphiでは文同士を改行ではなくセミコロン(;)で区切るため文同士の区切り(≒文の最後)には必ずセミコロン(;)を付けなければならないという決まりがあるのです。長いプログラムを書いていると書き忘れやすいので注意してください。「演算子またはセミコロン(;)が不足しています」と表示されたらまずセミコロンの書き忘れがないかチェックしてみましょう。
IF文とは、
if (条件式) then (文) ;
この様に書いたとき、(条件式)の結果がTrue(正しい、真)ならば(文)が実行される…というものです。超重要。
if文というものは全体で一つの文として成り立っているため原則(文)に複数の文を書くことはできません。ですが、後ほど述べるbeginとend;で括れば複数の文をいれることができます。
if文をマ●オの仕様でイメージすると
if < Bボタンが押された > then < ダッシュ > ;
if < Aボタンが押された > then < ジャンプ > ;
if < 敵があたった > then < チャランチャチャランララン♪ > ;
こんな感じになってます。
なお、ここで条件式を作る際に重要視される単語たちを書いておきます。毎度言うように無理して全部覚える必要はありません。
if A > B then (文)
if (A > B) and (B > C) then (文)
if A > (B and B) > C then (文)
となりおかしくなってしまうからです。if (player = bob) and (enemy = akebono) then result:=win;
if (enemy = motoya) or (enemy = akebono) then result:=win;
if (enemy1 = guri) xor (enemy2 = gura) then result:=win;
if not(enemy = akebono) then result:=lose;
さて、ざっとif文の説明をしたところで実際に使ってみましょう。ちなみにForm1のOnCreateイベントも利用してるので、OnClick同様OnCreateイベントのところをダブルクリックしておいてください。
procedure TForm1.FormCreate(Sender: TObject);
begin;
ShowMessage('1+1は?');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text = '2' then ShowMessage('正解!');
if Edit1.Text <> '2' then ShowMessage('バーカ!');
end;
どういうことが行われているか判りますか?Edit1に入力された文字列によって表示するメッセージを変えているのです。else節というものを使えばもっとスマートなプログラムができます。以下else節の説明。
If (条件) then(文1)else (文2);
こうすれば(条件)が偽の時(文2)が実行されます。たとえば某ヨッシーが主人公のアクションゲームだと
if < Bボタンが押された > then < ふんばりジャンプ > else < 落下 > ;
このようになります。なお、else
を書いた時点では一つの文として成り立ってないのでelse
の直前に;は必要ありません。
また、if文というものは全体で一つの文として成り立っているため(文1)と同様に(文2)にも複数の文をいれることはできません。(文2)も後ほど述べるbeginとend;で括れば複数の文をいれることができます。
elseをつかって先ほどのプログラムを書き直してみましょう。
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage('1+1の答えは?');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text = '2' then ShowMessage('正解!')
else ShowMessage('バーカ!');
end;
"Edit1.Text"が正解(2)と合致するかをチェックし、当てはまったら「正解」と、当てはまらなかったら「バーカ」と表示されるはずです。
If < 条件1 > then < 文1 >
If < 条件1 > then < 文2 >
If < 条件1 > then < 文3 >
この文は、次のように書き換えられます。
If < 条件1 > then
begin
< 文1 >
< 文2 >
< 文3 >
end;
今まではthenの跡、条件に一致した時命令を一つしか書けなかったのですが、このように複数の文をbeginとend;でくくれば複数のの命令を実行させることができます。
複数の文をまとめて一つの文にしているとイメージしたほうが解り易いかもしれません。
このようにbeginとend;でくくれば複数の文を実行できるのは後で述べるFor文、While文などでも同様です。ちなみにelse文も
If < 条件1 > then
begin
< 文1 >
< 文2 >
end
else
begin
< 文3 >
< 文4 >
end;
とすることができます。いままでのプログラムを加工すると
procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage('1+1の答えは?');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Edit1.Text = '2' then
begin
ShowMessage('正解!');
ShowMessage('すごいね!');
end
else
begin
ShowMessage('バーカ!');
ShowMessage('アーホ!');
end;
end;
さて、いままで普通に"ShowMessage('うほうほ')"を使いまくってきたのですが、この簡単にメッセージダイアログを表示させられる"ShowMessage('うほうほ')"とは何者なのでしょうか。
じつはこの"ShowMessage('うほうほ')"は手続きと呼ばれているものなのです。イメージ的には役所などの「手続き」をそのまま思い浮かべてくれればよいでしょう。
役所では、書類を窓口に提出することでいろいろな処理がなされます。それと同じように、"ShowMessage('うひうひ')"のように'うひうひ'という文字列を窓口のようなところに引渡し、メッセージを表示してもらっているのです。
この引き渡すものの事は引数(注・「ひきすう」と読みます)と呼ばれています。覚えておきましょう。
ちなみに、"手続き"の仲間のようなものとして関数と呼ばれているものがあり、それが次回でてくるのでここで予習しておきましょう。"手続き"が役所なら、"関数"は銀行のようなものです。銀行では情報を窓口から引き渡すといろいろな処理がなされ、最終的にお金を渡されたりと何か動作が戻ってきます。関数も同じで、引数を渡すとさまざまな処理がなされ最終的に値が戻ります(これを戻り値と呼びます)。
つまり、"手続き"と"関数"の違いは値が戻るか戻らないか…ということだけで、大抵の部分は同じです。