モジュール

 モジュールの機能を利用すると,プログラム単位間での変数の共有ができる。


1.モジュールは,public変数,share変数と外部手続き(外部関数定義,外部副プログラム,外部絵定義)から構成される。
 public変数は,モジュール全体,および,その変数に対する外部共用宣言(declare-external文)を書いたモジュール外のプログラム単位で共有される。
 share変数は,モジュール全体で共有される。

2.例(Share変数)
 次のプログラムで,2030行で定義された数値変数indexと数値配列stackは,モジュールstack内で共用される。
1000 DECLARE EXTERNAL SUB stack.push
1010 DECLARE EXTERNAL FUNCTION stack.pop
1020 CALL push(12)
1030 PRINT pop
1040 END
1050 !
2000 MODULE stack
2010 PUBLIC SUB push
2020 PUBLIC FUNCTION pop
2030 SHARE NUMERIC index, stack(100)
2040 LET index=0
2100 EXTERNAL SUB push(a)
2110 LET index=index+1
2120 LET stack(index)=a
2130 END SUB
2200 EXTERNAL FUNCTION pop
2210 LET pop=stack(index)
2220 LET index=index-1
2230 END FUNCTION
2240 END MODULE

3.モジュールには,モジュール本体,外部手続きの順に書く。
 モジュール本体には,public宣言,share宣言を書くことができる。
 主プログラムの実行が開始される前にモジュール本体が実行される。
 public宣言は,指定された変数や手続きがモジュール外でも利用できることを宣言する。
PUBLIC NUMERIC 数値変数名 ,数値変数名 ,…
PUBLIC STRING 文字列変数名 ,文字列変数名 ,…
PUBLIC FUNCTION 関数名 ,関数名 ,…
PUBLIC SUB 副プログラム名 ,副プログラム名 , …
PUBLIC PICTURE 絵定義名 , 絵定義名 , …
 share宣言は,指定された変数がモジュール内で共用されることを宣言する。
SHARE NUMERIC 数値変数名 ,数値変数名 ,…
SHARE STRING 文字列変数名 ,文字列変数名 ,…
SHARE FUNCTION 関数名 ,関数名 ,…
SHARE CHANNEL 経路番号 , 経路番号 , … (経路番号は, #1 ,#2 など)
 public文,share文で,数値配列,文字列配列を指定する場合は,変数名に上下限指定部を含めて書く。

MODULE m1
PUBLIC NUMERIC a(2,2), b
PUBLIC STRING s$(4)
SHARE NUMERIC c(10)
LET b=pi/4
 …………
END MODULE

4.モジュール本体にmodule-option文を書くことができる。
例 MODULE OPTION ANGLE DEGREES
  MODULE OPTION ARITHMETIC NATIVE
 module-option文はモジュール全体に効果を及ぼす。
◇ モジュール本体に書いたOPTION文の有効範囲はモジュール本体。
★ JISの規定では,OPTION文,MODULE OPTION文は,PUBLIC文,SHARE文以降に書かなければならないことになっているが,本BASICでは位置を逆にしなければ翻訳できないことがある。
 モジュール本体はプログラム単位と似ているが,モジュール本体に内部手続きを書くことは許されていない。

5.モジュール外からpublic宣言された変数や関数を参照するとき,それらを参照するプログラム単位ごとに declare-external文を書く。
DECLARE EXTERNAL NUMERIC モジュール名.数値変数名 , モジュール名.数値変数名 , …
DECLARE EXTERNAL STRING モジュール名.文字列変数名 , モジュール名.文字列変数名 , …
DECLARE EXTERNAL FUNCTION モジュール名.関数名 , モジュール名.関数名 ,…
DECLARE EXTERNAL SUB モジュール名.副プログラム名 , モジュール名.副プログラム名 , …
DECLARE EXTERNAL PICTURE モジュール名.絵定義名 , モジュール名.絵定義名 , …

 数値配列,文字列配列を指定する場合には,副プログラムや関数定義の仮引数に書くのと同様に,括弧と(次元数−1)個のコンマを書く。

DECLARE EXTERNAL NUMERIC m1.a(,), m1.b
DECLARE EXTERNAL STRING m1.s$()
 宣言された変数や関数を参照するとき,モジュール.変数名 のように書くことも,モジュール名. を省いて書くこともできる。


<参照>モジュールの使用例は,サンプルプログラムの
SAMPLE\TURTLE2.BAS
SAMPLE\INTERPRE.BAS
にあります。