No Programming, No Life

新しいNPNLです。http://d.hatena.ne.jp/fumokmm/ から引っ越してきました。

スクリプト間の引数のテスト

スクリプト間で引数の受け渡しのテスト。

呼ぶ方.uws

PRINT "パターン1:パラメータをつけて呼び出す"
call .\呼ばれる方.uws("パラメータ1","パラメータ2")

PRINT "パターン2:パラメータの2番目が欠落"
call .\呼ばれる方.uws("パラメータ1")

PRINT "パターン3:パラメータをつけない"
call .\呼ばれる方.uws()

PRINT "パターン4:パラメータに空文字で呼び出す"
call .\呼ばれる方.uws("","パラメータ2")

PRINT "パターン5:パラメータをNULLで呼び出す"
call .\呼ばれる方.uws(NULL,"パラメータ2")

PRINT "パターン6:パラメータをEMPTYで呼び出す"
call .\呼ばれる方.uws(EMPTY,"パラメータ2")

呼ばれる方.uws

tab = CHR($09)

IFB PARAM_STR[0] = "" THEN
	PRINT tab + "パラメータ1は空文字です。"
ELSEIF PARAM_STR[0] = NULL THEN
	PRINT tab + "パラメータ1はNULLです。"
ELSEIF PARAM_STR[0] = EMPTY THEN
	PRINT tab + "パラメータ1はEMPTYです。"
ELSE
	PRINT tab + "パラメータ1は[" + PARAM_STR[0] + "]です。"
ENDIF

IFB PARAM_STR[1] = "" THEN
	PRINT tab + "パラメータ2は空文字です。"
ELSEIF PARAM_STR[1] = NULL THEN
	PRINT tab + "パラメータ2はNULLです。"
ELSEIF PARAM_STR[1] = EMPTY THEN
	PRINT tab + "パラメータ2はEMPTYです。"
ELSE
	PRINT tab + "パラメータ2は[" + PARAM_STR[1] + "]です。"
ENDIF

PRINT ""

出力結果


パターン1:パラメータをつけて呼び出す
パラメータ1は[パラメータ1]です。
パラメータ2は[パラメータ2]です。

パターン2:パラメータの2番目が欠落
パラメータ1は[パラメータ1]です。
パラメータ2は空文字です。

パターン3:パラメータをつけない
パラメータ1は空文字です。
パラメータ2は空文字です。

パターン4:パラメータに空文字で呼び出す
パラメータ1は空文字です。
パラメータ2は[パラメータ2]です。

パターン5:パラメータをNULLで呼び出す
パラメータ1はNULLです。
パラメータ2は[パラメータ2]です。

パターン6:パラメータをEMPTYで呼び出す
パラメータ1は空文字です。
パラメータ2は[パラメータ2]です。

結論

  • パラメータを省略すると空文字として渡される。(デフォルトでは省略になっているので空文字として渡されている)
  • NULLで渡すときちんとNULLとして渡る(空文字とは別物として扱われるみたい)
  • EMPTY はから文字として渡される。(ところでEMPTYって何?)

ということで、明示的にNULLを渡してあげるとNULLとして渡ることがわかりました。
それ以外は渡さないと空文字として渡ってしまうんですね。
ところでEMPTYってなんなんでしょうか?空文字って意味?
ヘルプを見ても「値の無い状態を示す」としか書いてないのでいまいち…。


<組込み定数>
 TRUE // 1
 FALSE // 0
 NULL // ヌルポインタ
EMPTY  // 値の無い状態を示す
 NOTHING // オブジェクトの無い状態を示す

NULLとNOTHINGが共存してるのも分かりづらっちゃぁ分かりづらいですね。
注意していかないと。