HP-BASIC入門
ホーム » HPBASIC入門 » 関数

関数


プログラミングにおける関数はユーザーが作ったユーザー定義 関数と、サブプログラム関数があります。 これらは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)