忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

BHT-BASIC4.0:ユーザ定義関数について(BHT-1300)
ハンディターミナルの開発言語であるBHT-BASIC4.0についての4回目になります。 今回はユーザ定義関数について説明したいと思います。

■ユーザ定義関数

ユーザ定義関数とは、BHT-BASICが既に備わっている関数ではなく、 ユーザが任意で作成する関数のことです。 ユーザが定義できる関数には大きく分けて2種類のものがあり、 DEF FN及びFUNCTIONで定義される値を返す関数と、 SUBで定義される値を返さない関数があります。
このうちFUNCTION関数SUB関数DECLAREステートメントで宣言することで 別モジュールで使用することができます。

DEF FN関数及びFUNCTION関数には返す値により 関数の最後にデータ型を示す記号を付加します。
ユーザ定義関数のデータ型DEF FN関数の書式FUNCTION関数の書式
整数型 FN関数名% 関数名%
長整数型 FN関数名& 関数名&
実数型 FN関数名 関数名
文字型 FN関数名$ 関数名$
文字型
(文字列長指定)
FN関数名$(・・・)[NNN]
(NNN:に文字列長指定)
関数名$(・・・)[NNN]
(NNN:に文字列長指定)

値を返す関数は、私は専らFUNCTION関数を使い、DEF FN関数は殆んど使っていません。 なぜならば、DEF FN関数ではSTATIC変数が使えませんし、 他のモジュールから参照することができないからです。

尚、値を返さない関数は当然のことSUB関数で宣言します。

関数には値を渡さない場合は引数の宣言をしませんが、 値が必要な場合には関数の宣言のところで引数の宣言を行います。 この引数の渡し方には、値渡し(call by value)と、 参照渡し(call by reference)の2種類があります。

■値渡し・参照渡し

以下のソース「MODULE1.SRC」を見てください。
'File	[MODULE1.SRC]
	FUNCTION Func1%(BYVAL P%)
		Func1% = P% * 2	'引数を2倍して戻す
	END FUNCTION

	FUNCTION Func2%(BYREF P%)
		Func2% = P% * 2	'引数を2倍して戻す
		P% = P% + 1		'引数に+1する
	END FUNCTION
	
	DIM	I%
	I% = 10
	PRINT "Func1%=" ; Func1%(I%)
	PRINT "I%=" ; I%	'I%は変わらない
	PRINT "Func2%=" ; Func2%(I%)
	PRINT "I%=" ; I%	'I%は変化した!!
	
	Wait 0, &h01	'キー入力待ち
	END


これを実行すると以下の表示の様になります。

FUNCTION関数の宣言はFUNCTIONで始まり、END FUNCTIONで終わります。 関数の引数は仮引数名で宣言し、値渡しはBYVALキーワードで宣言し、 参照渡しはBYREFキーワードで宣言します。 BYVALBYREFが無い場合はデフォルトで値渡しになりますが、 引数の意味合いをはっきりさせるため、必ずこのキーワードを付加すべきだと思います。

関数の戻り値は関数名に値を代入することで戻します。
このソースでは、Func1%は値渡し、Func2%は参照渡しの例です。

=====
2016/04/02:の時の情報











PR

コメント

コメントを書く