関数
プログラミングにおける関数はユーザーが作ったユーザー定義
関数と、サブプログラム関数があります。
これらはGOTO文で示される可読性の悪いプログラムを避けるための
有効な手段として用いられます。
ユーザー関数とサブプログラムの違いは、サブプログラムはCALL文を
使って明示的に呼び出すのに対し、ユーザー定義関数は暗黙に
呼び出される違いがあります。
サブプログラムとユーザー定義関数はプログラムの
最後に置くというルールがあります。
サブプログラムについて
サブプログラムは
100 SUB Array(N)
110 Interger i,j
120 I=J+N
130 SUBEND
のようにSUB~SUBENDで囲み、サブプログラム名を定義します。 呼び出し元のプログラムがデータを引き渡すには2通りの 方法があり、値渡しと参照渡しがあります。 値渡しはコピーされたデータを使用して計算を行うのに対し、 参照渡しはアドレスが渡されるため、メインプログラムの値 を書き換えてしまうことになります。
プログラムとサブプログラムのデータのやり取りには、 パラメータの引き渡しによるデータのやり取りと、 共通変数(COM)変数ブロックを共有する方法があります。
パラメータの引き渡しにおいては
30 CALL Build(Num(*),20)
のように関数の後に引き渡しパラメータリストをつけて 関数を呼び出します。またサブプログラムの宣言部分において
70 SUB Build(X(*),N)
のように仮のパラメータリストをつけて宣言します。
これはサブプログラムに渡された情報の形式を指定するので、仮
パラメータリストと呼ばれます。
呼び出しの文脈がサブプログラムに値を引き渡す方法は値渡しと 参照渡しがあり、値は値だけを渡し、メインプログラムに何ら 影響はないのですが、参照渡しは値のアドレスを渡すので、 共通変数への影響が考えられます。
サブプログラムではパラメータを値渡しするか、参照渡しする かを制御することはできません。 これは呼び出し元の文脈の引き渡しパラメータ・リストによって 決まります。 たとえば配列は参照渡しされますが、20は値渡しされることになります。
30 CALL Build(Num(*),20)
COMによる値の引き渡し
共通変数を使って値をやりとりする場合、COM宣言をおこないます。
10 OPTION BASE 1
20 COM Conditions(15)