MODULE化

構文
MODULE モジュール名
  CONST 変数
  PUBLIC 変数
  DIM 変数
  PROCEDURE モジュール名
  PROCEDURE 関数名( )
  FUNCTION 関数名( )
ENDMODULE

CLASS
  CONST 変数
  PUBLIC 変数
  DIM 変数
  PROCEDURE クラス名
  PROCEDURE 関数名( )
  FUNCTION 関数名( )
ENDCLASS
引数
戻値

モジュールとは

モジュールとは、同じような機能を持った関数をひとまとまりのグループにしたものを言います。

例えばPythonでは、数学計算用の関数を集めたmathモジュール、日付や時間を扱うdatetimeモジュールなどがあります。

モジュールは入れ子(ネスト)することはできません。関数名に「.(ピリオド)」をつけることで階層化したように見せる書き方はできます。

Cipher関数では、モジュール名がCipher、関数名にCaesar.encodeとCaesar.decodeで入れ子したような書き方をしています。

MODULE Cipher
	MODULE Caesar
		FUNCTION encode()
			RESULT = “”
		FEND
		FUNCTION decode()
			RESULT = “”
		FEND
	ENDMODULE
ENDMODULE
MODULE Cipher
	FUNCTION Caesar.encode()
		RESULT = “”
	FEND
	FUNCTION Caesar.decode()
		RESULT = “”
	FEND
ENDMODULE

使い方

モジュール内にある変数・関数・モジュール名を呼び出すには以下のように書きます。

  1. モジュール名.変数
  2. モジュール名.モジュール名
  3. モジュール名.関数名([引数], …)

CONSTまたはPUBLICで宣言されたものは、「モジュール名.変数」で外部からも呼び出すことができます。

DIMで宣言されたものは、外部からアクセスすることはできません。

モジュール内の関数から同一モジュール内の関数を呼び出すときモジュール名は省略できます。

コンストラクタ

モジュール名と同じ関数はコンストラクタとして機能します。コンストラクタはインスタンス生成時に自動的に呼び出されるのでメンバを初期化するときによく使われます。

以下の例では、PUBLICでnに1が代入されその後className関数でnの値が+1されるので。「2」が結果として出力されます。

PRINT className.n

CLASS className
	PUBLIC n = 1
	PROCEDURE className
		n = n + 1
	FEND
ENDCLASS

モジュールの書き方

以下のプログラムは、Pythonのmathモジュールの一部をUWSCで書いてみた例です。

PRINT math.pi
PRINT math.e
PRINT math.tau
PRINT math.fabs(-4)
PRINT math.factorial(5)

MODULE math
	// 円周率π
	CONST pi = 3.14159265358979323846
	// 自然対数e
	CONST e = 2.71828182845904523536
	// τ(τ=2π)
	CONST tau = THIS.pi * 2
	
	// 引数の絶対値を返す
	FUNCTION fabs(x)
		RESULT = ABS(x)
	FEND
	
	// 引数の階乗を返す
	FUNCTION factorial(x)
		IF x <> ABS(INT(x)) THEN RESULT = ERR_VALUE
		IFB x = 0 OR x = 1 THEN
			RESULT = 1
		ELSE
			RESULT = x * factorial(x – 1)
		ENDIF
	FEND
ENDMODULE