#4 型と手続き・関数


 やっと骨組みの話が終わりました。次に肉付け(実装)に入っていきます。Delphiどころか、プログラムやったこと無い人にもわかって欲しいんで、余談交えて丁寧に語ります。

「型・手続き・関数!」の巻

 プログラムとは、いかなるものであってもデータを受け取り、処理をして、(場合によって)結果を返すものです。
 ここでは「型」と「手続き」「関数」という3つのことを覚えてもらいます。

「型」

 データには「型」があります。データは変数に格納しますが、変数とデータの型が違うとコンパイラは解釈できずとまります。変数の宣言はvarのところでやるのでしたね。データの値をソースコードの中ですばり書き下したものをリテラルといいます。リテラルと変数の宣言が合っていないとコンパイラはとまります。
   変数・定数・リテラルの区別はは余談1へ=>Go!

 <例>
 var a:integer;//変数aを整数型で宣言。
  ・・・・・・・・・・・・・・・
 a := 3;//整数型の変数「a」に
         //整数型のリテラル「3」を代入。この文はOK!
  a := 'この文字列リテラルは整数型に入らない';//エラー。
  ・・・・・・・・・・・・・・・

「手続き」

 代入「:=」や条件分岐(if文やswitchなどの文)、繰り返し(for文やwhile文)などを経て、色々な処理をしてプログラムは動作します。複数の動作をまとめたものでデータを返さないものを(=「空」のデータを返す)「手続き」と呼びます。次のように予約語procedureを使って宣言します。
<例>
  procedure Proc(a,b:string);
   const mx:integer=9;
   var i:integer;//変数iを整数型で宣言。
  begin
    writeln(mx,'回繰り返します。');
    for i:=1 to mx do
     begin
      write(a);write(i,'回目 ');writeln(b);
     end;
  end;
constやvarはこのProcという手続きの中でだけ有効な定数や変数を宣言しています。

「関数」

 「関数」は「手続き」に結果の値を返すことが加わったものです。すなわち、複数の動作をまとめたものでデータを返すものを「関数」と呼びます。次のように予約語functionを使って宣言します。
<例>
  function Func(a,b:string):string;
   const mx:integer=9;
   var i:integer;//変数iを整数型で宣言。
  begin
    writeln(mx,'回繰り返します。');
    for i:=1 to mx do
     begin
      write(a);write(i,'回目 ');writeln(b);
      result:=b+'という語を'+IntToStr(i)+'回出力しました。';
     end;
  end;
 関数の宣言は戻り値(return value)の型を定義しています。この場合は宣言行の最後のString;がこの関数は文字列を返すということを明言しています。関数の内部で使えるresultという変数が自動的に定義されます。ここに代入した値が関数を呼び出したコードに返されます。
 なお、先と同様にその「関数」の中だけで使える変数/定数をconst,varで宣言できます。
(2004/Jan/04)


ページtopへ

リファレンス

 斜体は節の宣言を示す。例えばvar <変数名>:<型名>;とあれば、varのセクションで繰り返し宣言ができる。
ex.
var
  i,j:integer;
  s:string;
  ・・・・・・・


余談1 元へ 「変数・定数・リテラル」
 Delphiに限らずこの3つの言葉は区別しなければなりません。
 変数はデータを入れ替えでき、定数はできません。

変数は次のように宣言します。

var 変数識別子: 変数型
<例1、一個だけ宣言。>
var I: Integer;
<例2、一つの型で複数宣言。>
var X, Y: Real;
<例3、複数の型で複数宣言。>
変数を連続して宣言する場合,予約語 var を繰り返す必要なし。
var
X, Y, Z: Double;
I, J, K: Integer;

定数は次のように宣言します。

const 定数識別子: 定数型 = 定数値
ex.
const Max: Integer = 100;


「リテラル」という言葉はMax:= 100;の100やa:='こんにちは';の'こんにちは'のようにデータをその値で書いている部分を指します。頻度が多くでてくるリテラルはなるべく定数に値を代入する方がリテラルの内容を変更したいときにコード修正が少なくてよいといわれています。


ページtopへ