HSP3 プログラミングの基礎U | |
(4) ユーザ定義 3
◎ 変数の有効範囲
ユーザ定義部とメイン部で使われる変数には、プログラム全体で共通に使える(グローバル)変数やメインとは別のものとして扱われる(ローカル)変数とがある。ここでは、変数がどの範囲で有効か(共通で使えるか)を調べる。
変数の有効範囲 (グローバル:プログラム全体で共通)
goto *start ;-----ユーザ定義部---------- #deffunc testsub int para allx = para * 2 mes "2倍は、" + allx + "です。" return ;-----メイン部---------- *start input indata button "判定", *han allx = 12345 stop *han testsub indata mes "allx=" + allx stop
変数allxに注目。
ユーザ定義部とメイン部で変数allxを使用している。実行結果のようにユーザ定義部で代入された2倍の値がメイン部の出力命令でも表示されている。
変数の有効範囲 (ローカル:モジュールごとに別)
goto *start ;-----ユーザ定義部(モジュール化)---------- #module #deffunc testsub int para allx = para * 2 mes "2倍は、" + allx + "です。" return #global ;-----メイン部---------- *start input indata button "判定", *han allx = 12345 stop *han testsub indata mes "allx=" + allx stop
変数allxに注目。
ユーザ定義部とメイン部で変数allxを使用している。実行結果のようにメイン部で代入された値12345がメイン部の出力命令で表示されている。
変数の有効範囲 (パラメータは特別)
goto *start ;-----ユーザ定義部---------- #deffunc testsub int para allx = para * 2 mes "2倍は、" + allx + "です。" return ;-----メイン部---------- *start input indata button "判定", *han allx = 12345 stop *han testsub indata mes "para=" + para ;←ここでエラー stop
「無効な名前がパラメーターに指定されています」とエラーが表示されてプログラムが中断する。
ユーザ定義部をモジュール化する。
goto *start ;-----ユーザ定義部(モジュール化)---------- #module #deffunc testsub int para allx = para * 2 mes "2倍は、" + allx + "です。" return #global ;-----メイン部---------- *start input indata button "判定", *han allx = 12345 stop *han testsub indata mes "para=" + para stop
モジュール化した部分は、独立した部分となるので、パラメータと同じ名前を使ってもエラーにはならない。
パラメータに値を代入する。(変数の使用数を減らす)
goto *start ;-----ユーザ定義部(モジュール化)---------- #module #deffunc testsub int para = para * 2 ;←ここでエラー mes "2倍は、" + para + "です。" return #global ;-----メイン部---------- *start input indata button "判定", *han allx = 12345 stop *han testsub indata mes "para=" + para stop
「変数名が指定されていません」とエラーが表示されてプログラムが中断する。
グローバル ユーザ定義部 #deffunc(#defcfunc) 名前 パラメータ
…
return変数(配列変数)は、
プログラム全体で共通に
使える(参照できる)。メイン部 *start
…
stopローカル モジュール化した
ユーザ定義部#module
#deffunc(#defcfunc) 名前 パラメータ
…
return
#globalこの部分の変数(配列変数)は、
メイン部とは別のものとして
扱われる。メイン部 *start
…
stopこの部分の変数(配列変数)は、
ユーザ定義部とは別のものとして
扱われる。パラメータ モジュール化しない #deffunc(#defcfunc) 名前 パラメータ
…
return
*start
mes パラメータ
stopメイン部でパラメータと同じ名前を
使うとエラーになる。モジュール化する #module
#deffunc(#defcfunc) 名前 パラメータ
…
return
#global
*start
mes パラメータ
stopモジュール化で独立するので、
メイン部でパラメータと同じ名前を
使ってもエラーにならない。代入不可
(代入できない。)#deffunc(#defcfunc) 名前 パラメータ
パラメータ = 値
returnモジュール化する、しないに
かかわらず、パラメータに値を
代入することはできない。
◎ 推奨されない変数使用 モジュールの内と外で変数を相互に参照する方法である。このようにした場合、モジュール化する意味が薄れるので使わない方が良い。
2006 © Hiroshi Masuda |