3-8 変数 (2) ―宣言して使う変数―

VisibleFalse にすると、EditTemp は画面から消えてしまうので、HeightWidth, Color などのプロパティにはどんな値を入れても意味がないですね。入れ替えに必要なのは、Text プロパティだけなのです。中継用エディットを使わない、もっとよい方法はないのでしょうか。

ここで、新しい方法を試してみます。まずは、EditTemp を削除してください。EditTemp を削除したので、EditTemp を中継欄に使うことはできなくなりました。そこで、今消した EditTemp のかわりにもっと単純な中継欄を作ります。procedurebegin の間に、次のように付け加えてください。

procedure TForm1.ButtonSwapClick(Sender: TObject);
var
  temp: String;
begin
  EditTemp.Text := Edit1.Text;
  Edit1.Text := Edit2.Text;
  Edit2.Text := EditTemp.Text;
end;

EditTemp はなくなりましたが、これで temp という入れ物ができ、tempEditTemp.Text のかわりをします。EditTemp.TextString 型だったので、そのかわりとなる tempString 型でなくてはなりません。そのため「temp: String;」と書きます。(もし Integer 型が必要なら「temp: Integer;」と書きます。)

なお、「var」は「これから (temp のような) 入れ物を宣言 (用意) するよ」という宣言です。

【基礎課題 3-7】

temp を使って (EditTemp.Text を使わないで) プログラムを完成させるには、どのように変更するといいでしょうか。下の空欄を埋めてプログラムを完成させて下さい。

procedure TForm1.ButtonChangeClick(Sender: TObject);
var
  temp: String;
begin
              := Edit1.Text;
  Edit1.Text := Edit2.Text;
  Edit2.Text :=             ;
end;

temp のように値を保存しておく入れ物を「変数」といいます。今の場合 temp は画面に現れない「エディットコンポーネントの Text プロパティ」と考えて結構です。変数の名前は temp でなくとも自由につけても構いませんが、なるべく一目見て内容がわかる名前をつけましょう。なお、変数宣言の「var」は変数を意味する「variable」の略です。

コラム

変数の名前は原則として自由につけて構わないのですが、いくつか例外があります。

temp」という変数を用いることは、プログラムにとって必要充分な機能を提供することになります。余計なものを使わずにこうして必要充分なものを用いるようにすると、プログラムが速くなり、プログラムサイズが小さくなります。

【基礎課題 3-8】

今度はスピンエディットの入れ替えプログラムを作ってみましょう。

左のようなフォームを作ってください。

フォームができたらプログラムを書いてください。

出来上がったら、適当な数値を入れて実行してみましょう。

【基礎課題 3-9】

【基礎課題 3-3】で作ったプログラム

からスピンエディットおよび、ラベルも削除して下さい。そして、変数を用いるプログラムに修正します。下線部を埋めてプログラムを完成させて下さい。

procedure TForm1.ButtonAddClick(Sender: TObject);
var
  a:                  ;
  b:                  ;
  c:                  ;
begin
                   := StrToInt(Edit1.Text);
                   := StrToInt(Edit2.Text);
                   :=                  +                 ;
  EditResult.Text := IntToStr(                );
end;

今までどおり「足し算プログラム」として動くことを確認しましょう。

なお、変数の宣言では、

a: Integer;
b: Integer;
c: Integer;
をまとめて
a, b, c: Integer;
a: String;
b: String;
c: String;
をまとめて
a, b, c: String;

と、複数の変数をひとまとめにして宣言することができます。

コラム

「でも、【基礎課題 3-5】で作ったプログラムとここで作ったプログラムと、どちらも同じく動作するけど、どちらがいいの?」という疑問を持った人がいるかもしれませんね。どちらも同じく動作するから、どちらでもいいのです。

「だけど、実行したときの速さは違うんじゃない? 【基礎課題 3-5】で作ったプログラムの方が、命令が1行ですっきりしているから速いと思います。」なかなか鋭い質問ですね。ですが、実行する速さも同じなのです。

実は Delphi は、【基礎課題3-5】で作ったプログラムもここで作ったプログラムも本質的に同じものであることを理解しています。a, b, c のような一時的に値を保持する変数があってもなくても、Delphi は色々考えてなるべく速いプログラムを作ってくれます。この機能を「最適化」といいます。ただし、「最適化」は万能ではないので、ある程度以上複雑なプログラムの場合は、プログラムを速くするためには人間が工夫する必要があるでしょう。