MODULE化

本ページには広告が含まれています。

同じような処理を行うサブルーチン(関数)をまとめることをモジュール化といいます。

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

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

モジュールとは

モジュールとはプログラムにおいて特定の機能を持ったひとまとまりの構成要素(部品)のことを指します。

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

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

UWSC
MODULE Cipher
	MODULE Caesar
		FUNCTION encode()
			RESULT = ""
		FEND
		FUNCTION decode()
			RESULT = ""
		FEND
	ENDMODULE
ENDMODULE

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

このような書き方をすることでCipher.Caesar.encode()Cipher.Caesar.decode()というメソッドが使えるようになります。

UWSC
MODULE Cipher
	FUNCTION Caesar.encode()
		RESULT = ""
	FEND
	FUNCTION Caesar.decode()
		RESULT = ""
	FEND
ENDMODULE

ただ注意が必要なのはあくまでCaesar.encodeCaesar.decodeというひとかたまりで関数名で.がモジュール名とメソッドの区切りを表しているわけではないので、このピリオドで区切りWITH文で書くということはできません。

UWSC
WITH Cipher.Caesar
	PRINT .encode()
	PRINT .decode()
ENDWITH

モジュール名と関数名を分けることはできます。

UWSC
WITH Cipher
	PRINT .Caesar.encode()
	PRINT .Caesar.decode()
ENDWITH

使い方

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

UWSC
モジュール名.変数
モジュール名.モジュール名
モジュール名.関数名([引数], ...)

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

自モジュール内の変数、関数には自モジュールを示すTHIS.を付けてのアクセス可。

モジュール内からモジュール外関数を使う場合にGLOBAL.関数名にて明示可。

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

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

コンストラクタ

モジュール名と同じ関数は コンストラクタ として機能します。コンストラクタはインスタンス生成時に自動的に呼び出されるメソッドで、メンバを初期化するときによく使われます。モジュール内のすべての関数で共通する初期処理を記述する使い方もできます。

以下はclassNameというモジュール名で、同一のメソッドが実行されコンストラクタという文字列が出力されます。関数1と関数2はコンストラクタではないので出力されません。

UWSC
MODULE className
	PROCEDURE className
		PRINT "コンストラクタ"
	FEND
	PROCEDURE func1()
		PRINT "関数1"
	FEND
	PROCEDURE func2()
		PRINT "関数2"
	FEND
ENDMODULE
結果
プレーンテキスト
コンストラクタ

モジュールの書き方

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

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

関連記事

QuotedPrintable関数 (自作関数)
Quoted-printableのエンコード・デコードを行います。
Base64関数 (自作関数)
Base64のエンコード・デコードを行います。
Cipher関数 (自作関数)
文字列の暗号化・復号を行います。
Morse関数 (自作関数)
モールス信号の符号化・復号を行います。