procedure って一体なんでしょう?何となくは、みなさん分かっているのではないでしょうか。試しに辞書で引いてみますと、「手続き」と書いてありました。 そうです。そのまんまです。 例えば野球にたとえますと、ピッチャーの役目とキャッチャーの役目は全く違います。同じくショートとセカンドでも同様です。一人一人が別々の役割を持っており、そして全体で一つのチームとなって構成されているわけです。
procedure の場合でも同じく、一つの procedure( 手続き )に、全てのプログラムは書けません。一つの procedure( 手続き )に一つの機能を持ち、それが沢山集まって、いろいろな機能を持つプログラムが出来るのです。今回は、その procedure の見方を見てみましょう。
フォームにボタンを貼り付け、そのボタンをダブルクリックすると以下のようなプログラムが自動生成されます。
procedure TForm1.Button1Click(Sender: TObject); begin end;
フォームとボタンが関係していることは、何となくわかると思います。
始めのうちは以下のような見方をするといいのではないでしょうか。
まず、これから手続き ( procedure ) を行います。それはフォーム1( Form1 ) にあるボタンをクリック ( Button1Click ) したら、始めと終わり ( begin - end; ) の間にあることをやりますよ。オマケ ( Sender: TObject ) も付いてます。
少し違和感があるかもしれませんが、筆者はこういう見方をしていました。少しでも参考になればと思います。
せっかく野球の例えを出したので、それぞれ別々の機能を持った手続きどうしでの連係プレーを紹介したいと思います。まず、フォームにボタン( Button )1つ、エディット( Edit )2つを貼り付けてください。そして、その貼り付けたボタンをダブルクリックして下さい。以下に、プログラムを示します。
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} function Combine(s1, s2: string): string; begin Result := s1 + s2; end; procedure TForm1.Button1Click(Sender: TObject); var a, b, c: string; begin a := Edit1.Text; b := Edit2.Text; c := Combine(a, b); ShowMessage(c); end; end.
見慣れない function というのが出てきました。いまは procedure とほぼ同じだと、思ってもらって構いません。一つずつ見ていきましょう。まず、 function では、2つの string 型の文字列を受け取って、1つの string 型の文字列を返すという機能を function がしているという見方をして下さい。
次に、procedure ですが、ここでは、Edit1 と Edit2 のそれぞれに入力した文字を a, b に代入して、それを Combine 関数( 自作した関数 )に渡し、処理をしてもらった string 型の文字を返してもらって、最後にそれを表示しています。
procedure と function の違いは、戻り値があるかどうかです。procedure は、値をもらっても何も返しません。一方 function は、値をもらったら必ず返します。
function の中身を見ていきましょう。ただ単に、Result := s1 + s2; とだけ書いてあります。Result は function 関数なら暗黙的に宣言されている変数です。型は戻り値の型になります。つまり、私 ( Combine ) は、2つの文字 ( string ) をもらったら、それを結果として2つを足して( Result := s1 + s2; )もらった人に返しますよ。という意味です。少し説明が回りくどいですが、これで procedure と function の連係プレーができました。