OPTION指定

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

スクリプトファイル毎にオプションを指定します。

構文
OPTION 項目
EXPLICIT
変数宣言の強制(すべての変数でDIM、もしくはPUBLIC宣言が必要)
SAMESTR
文字比較、置換、サーチにて大文字、小文字を区別する
OPTPUBLIC
PUBLIC変数の重複定義を禁止する
OPTFINALLY
TRY-FINALLY間で強制終了が発生した時にも必ずFINALLY部を実行する
SPECIALCHAR
実行時に特殊文字(<#CR>, <#DBL>, <#TAB>)の変換をしない
SHORTCIRCUIT
論理演算(IF, IFB, WHILE, REPEAT)にて短絡評価をする(但しカッコ内は無効)。詳細は短絡評価を参照。
NOSTOPHOTKEY
停止ホットキーは無効にする
TOPSTOPFORM
STOPボタンウィンドウを最前面固定する
FIXBALLOON
吹き出しを仮想デスクトップの全画面に出す
DEFAULTFONT = フォント名
フォント, サイズを変更する(BALLOON, MSGBOX等)
POSITION = X, Y
位置を変更する
LOGPATH = ログパス名
ログファイルのパス、ファイル名を変更する
LOGLINES = ログ行数
ログ最大行数を変更する
LOGFILE = ログ出力モード
ログファイルの出力 = 1:出力しない2:日付を付けない3:秒もつける4:以前のログは削除
DLGTITLE = タイトル
INPUT, MSGBOX, SLCTBOXでのタイトルを変更する
引数
戻り値

スクリプトの先頭で宣言、各種設定の変更(,カンマにて項目の複数指定可)

UWSC
OPTION EXPLICIT         // 変数宣言の強制
OPTION SAMESTR          // 大文字・小文字を区別
OPTION OPTPUBLIC        // PUBLICの重複定義を禁止
OPTION OPTFINALLY       // FINALLY部を実行
OPTION SPECIALCHAR      // 特殊文字の変換をしない
OPTION SHORTCIRCUIT     // 短絡評価をする
OPTION NOSTOPHOTKEY     // 停止ホットキーを無効
OPTION TOPSTOPFORM      // STOPボタンウィンドウを最前面固定
OPTION FIXBALLOON       // 吹き出しを仮想デスクトップの全画面
OPTION DEFAULTFONT      // フォント, サイズを変更
OPTION POSITION         // 位置を変更
OPTION LOGPATH          // ログファイルのパスを変更
OPTION LOGLINES         // ログの最大行数を変更
OPTION LOGFILE          // ログ出力モード
OPTION DLGTITLE         // ダイアログのタイトル変更

使い方

変数宣言の強制(EXPLICIT)

変数の宣言を強制します。すべての変数でDIMまたはPUBLICでの宣言が必要になります。

UWSCでは変数の宣言を省略して変数に直接代入することができます。

UWSC
a = 1
b = 2

PRINT a + b
結果
プレーンテキスト
3

OPTION EXPLICITを宣言すると、定義されていない変数を最初に使用した箇所でエラーが発生します。以下では変数: A が定義されていませんとエラーが発生します。

UWSC
OPTION EXPLICIT

a = 1
b = 2

PRINT a + b

大文字・小文字を区別(SAMESTR)

文字比較、置換、サーチの際に、大文字・小文字の区別をします。

大文字と小文字の区別を行わないので、Aaは同じ文字として扱われTrueを返します。

UWSC
IFB "A" = "a" THEN
	PRINT TRUE
ELSE
	PRINT FALSE
ENDIF
結果
プレーンテキスト
True

OPTION SAMESTRを宣言すると大文字と小文字の区別を行うので、Aaは別の文字として扱われFalseを返します。

UWSC
OPTION SAMESTR

IFB "A" = "a" THEN
	PRINT TRUE
ELSE
	PRINT FALSE
ENDIF
結果
プレーンテキスト
False

以下はabcdの中からCが最初に見つかった位置を返します。大文字と小文字の区別を行わないので、最初のcの位置である3を返します。

UWSC
PRINT POS("C", "abcd")
結果
プレーンテキスト
3

以下の場合は大文字と小文字の区別をするので、Cは見つからず0を返します。

UWSC
OPTION SAMESTR

PRINT POS("C", "abcd")
結果
プレーンテキスト
0

OPTION SAMESTRを使用しているときにスクリプトの一部にのみ大文字・小文字の区別をしたくない場合、比較対象の文字列をSTRCONV関数 (スクリプト関数)で大文字(SC_UPPERCASE)もしくは小文字(SC_LOWERCASE)のどちらかに統一させます。

以下はAaの比較を行うプログラムで、OPTION SAMESTRの宣言で大文字・小文字を区別していますがSTRCONV関数 (スクリプト関数)で大文字に変換しAAの比較になるので、Trueを返します。

UWSC
OPTION SAMESTR

IFB STRCONV("A", SC_UPPERCASE) = STRCONV("a", SC_UPPERCASE) THEN
	PRINT TRUE
ELSE
	PRINT FALSE
ENDIF
結果
プレーンテキスト
True

PUBLICの重複定義の禁止(OPTPUBLIC)

PUBLIC変数の重複定義を禁止します。

FINALLY部を実行(OPTFINALLY)

TRY-FINALLY間で強制終了が発生した時にも必ずFINALLY部を実行します。

通常例外処理ではTRY節を実行した後、FINALLY節が実行されます。

UWSC
TRY
	PRINT "TRY節"
FINALLY
	PRINT "FINALLY節"
ENDTRY
結果
プレーンテキスト
TRY節
FINALLY節

TRY節EXITEXIT文が書かれていると、FINALLY節は実行されずに終了します。

UWSC
TRY
	PRINT "TRY節"
	EXITEXIT
FINALLY
	PRINT "FINALLY節"
ENDTRY
結果
プレーンテキスト
TRY節

OPTION OPTFINALLYが宣言されているとEXITEXIT文が書かれていてもFINALLY節が実行されます。

UWSC
OPTION OPTFINALLY

TRY
	PRINT "TRY節"
	EXITEXIT
FINALLY
	PRINT "FINALLY節"
ENDTRY
結果
プレーンテキスト
TRY節
FINALLY節

OPTION OPTFINALLYを宣言したらFINALLY節は実行されますが、TRY節のEXITEXIT以降は実行されません。

以下の場合、TRY節2は出力されません。

UWSC
OPTION OPTFINALLY

TRY
	PRINT "TRY節1"
	EXITEXIT
	PRINT "TRY節2"
FINALLY
	PRINT "FINALLY節"
ENDTRY
結果
プレーンテキスト
TRY節1
FINALLY節

特殊文字の変換をしない(SPECIALCHAR)

実行時に特殊文字の変換を行わずに、そのまま文字列として出力します。

短絡評価をする(SHORTCIRCUIT)

論理演算で短絡評価をします。宣言を行わなかったときは完全評価をします。詳細は短絡評価を参照。

停止ホットキーを無効(NOSTOPHOTKEY)

停止ホットキーを無効にします。現在割り当てられている停止ホットキーはUWSCの設定画面、または以下のプログラムで取得できます。UWSC.INISETセクション-StopHotKeyの値がホットキーを表す数値です。UWSC.INIの見方はUWSC.INIを参照。

UWSC
DIM modifers[] = "CTRL", "WIN", "ALT", "SHIFT+CTRL", "SHIFT+ALT", "CTRL+ALT"
DIM keys[] = "SPACE", "F1", "F2", "F3", "F4", "F9", "F10", "F11", "F12", "↑", _
				"↓", "→", "←", "Q", "W", "E", "R", "A", "S", "D", _
				"F", "End", "Home", "F5", "F6", "F7", "F8", "T", "Y", "U", _
				"I", "O", "P", "G", "H", "J", "K", "L", "Z", "X", _
				"C", "V", "B", "N", "M", "1", "2", "3", "4", "5", _
				"6", "7", "8", "9"

DIM WshShell = CREATEOLEOBJ("WScript.Shell")
DIM username = WshShell.ExpandEnvironmentStrings("%USERNAME%")
DIM str = READINI("SET", "StopHotKey", "C:\Users\" + username + "\AppData\Roaming\UWSC\UWSC.INI")

DIM nums = SPLIT(str, ",")

PRINT modifers[nums[0]] + " + " + keys[nums[1]]
結果
プレーンテキスト
ALT + F2

STOPボタンウィンドウを最前面固定(TOPSTOPFORM)

STOPボタンウィンドウを最前面固定にします。

吹き出しを仮想デスクトップの全画面(FIXBALLOON)

吹き出しを仮想デスクトップの全画面に出します。

フォント, サイズを変更(DEFAULTFONT)

BALLOON関数 (スクリプト関数)FUKIDASI関数 (スクリプト関数)MSGBOX関数 (スクリプト関数)等でのフォントの設定を変更します。

位置を変更(POSITION)

ログファイルのパスを変更(LOGPATH)

PRINT文実行時に出力するログのファイルのパスを指定します。

指定したパスにファイルがなければ自動的に生成されます。

UWSC
OPTION LOGPATH = "D:\Desktop\UWSC.LOG"

UWSC
C:\Users\akita\AppData\Roaming\UWSC\UWSC.LOG     // UWSCのログ
C:\Users\akita\AppData\Roaming\UWSC\UDEBUG.LOG   // UWSC Debuggerのログ

LOGPATHに指定できるのは文字列のみで、以下のようにLOGPATHに変数を使用することはできません。

UWSC
CONST ssfDesktop = 0

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDesktop)

OPTION LOGPATH = Folder.Self.Path + "\UWSC.LOG"

PRINT "ログ"

ログを出力するパスに変数を使用できるよう作成した関数です。stringに出力するログ、logpathにログを出力するパス、logfileにログの出力モード、loglinesに残すログの最大行数を指定します。

UWSC
PUBLIC LogDeleteFlg = TRUE

PROCEDURE PRINT(string, logpath, logfile = 0, loglines = 2000)
	GETTIME()
	SELECT logfile MOD 4
		CASE 0
			DIM datetime = COPY(G_TIME_YY4, LENGTH(G_TIME_YY4)-1) + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2 + "  "
		CASE 1, 2
			datetime = ""
		CASE 3
			datetime = COPY(G_TIME_YY4, LENGTH(G_TIME_YY4)-1) + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2 + "  "
	SELEND
	IF ((logfile AND 4) <> 0) AND LogDeleteFlg THEN
		DIM FID = FOPEN(logpath, F_READ OR F_WRITE)
		FPUT(FID, "", F_ALLTEXT)
		FCLOSE(FID)
		LogDeleteFlg = FALSE
	ENDIF
	FID = FOPEN(logpath, F_READ OR F_WRITE)
	FPUT(FID, datetime + string, 0, F_INSERT)
	FCLOSE(FID)
	FUKIDASI(string)
	SLEEP(0.010)
	FUKIDASI()
	FID = FOPEN(logpath, F_READ OR F_WRITE)
	DIM Maxrow = FGET(FID, F_LINECOUNT)
	DIM cnt = 0
	FOR row = Maxrow TO 1 STEP -1
		IF reTest(FGET(FID, row), "\d{2}\/\d{2}\/\d{2} \d{2}:\d{2}(?::\d{2})?  ") THEN cnt = cnt + 1
		IF cnt = loglines THEN BREAK
	NEXT
	DIM str = ""
	FOR i = row TO MaxRow
		str = str + FGET(FID, i) + "<#CR>"
	NEXT
	FPUT(FID, str, F_ALLTEXT)
	FCLOSE(FID)
FEND

//////////////////////////////////////////////////
// 【引数】
//   str : 正規表現による検索の対象となる文字列 
//   Pattern : 正規表現で使用するパターンを設定 
//   IgnoreCase : 大文字・小文字を区別しない場合はTrue、区別する場合はFalse 
//   Global : 文字列全体を検索する場合はTrue、しない場合はFalse 
// 【戻り値】
//   正規表現にマッチするかどうかを示すブール値 
//////////////////////////////////////////////////
FUNCTION reTest(str, Pattern, IgnoreCase = TRUE, Global = TRUE)
	DIM re = CREATEOLEOBJ("VBScript.RegExp")
	re.Pattern = Pattern
	re.IgnoreCase = IgnoreCase
	re.Global = Global
	RESULT = re.Test(str)
FEND

以下はPRINT関数の解説です。

UWSC
PUBLIC LogDeleteFlg = TRUE

以前のログを削除するためのグローバル変数。メインルーチンから初めてPRINT関数が呼び出されたときのみ実行するための変数です。ログが削除されたらFALSEが代入されます。

UWSC
PROCEDURE PRINT(string, logpath, logfile = 0, loglines = 2000)

UWSC
	GETTIME()
	SELECT logfile MOD 4
		CASE 0
			DIM datetime = COPY(G_TIME_YY4, LENGTH(G_TIME_YY4)-1) + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2 + "  "
		CASE 1, 2
			datetime = ""
		CASE 3
			datetime = COPY(G_TIME_YY4, LENGTH(G_TIME_YY4)-1) + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ":" + G_TIME_SS2 + "  "
	SELEND

ログを出力された日時をdatetimeに代入します。logfileの値によって日時の形式が変わります。logfile0のときはyy/mm/dd hh:nn1または2のときは値なし、3のときはyy/mm/dd hh:nn:ssの形式で現在の時刻を代入します。

UWSC
	IF ((logfile AND 4) <> 0) AND LogDeleteFlg THEN
		DIM FID = FOPEN(logpath, F_READ OR F_WRITE)
		FPUT(FID, "", F_ALLTEXT)
		FCLOSE(FID)
		LogDeleteFlg = FALSE
	ENDIF

logfileの値の第2ビット(数値を2進数にして右から3桁目の値)が1、かつ、LogDeleteFlgTRUE(以前のログの削除をまだ行っていない)の場合、logpath内のテキストをすべて削除します。

以下はlogfileの値と4との論理演算を行ったときの例。論理演算の結果が4になるとき以前のログを削除する処理を行っています。

UWSC
FOR logfile = 0 TO 20
	PRINT logfile + "," + decToBin(logfile) + "," + (logfile AND 4)
NEXT
結果
CSV
0,    00000000,   0
1,    00000001,   0
2,    00000010,   0
3,    00000011,   0
4,    00000100,   4
5,    00000101,   4
6,    00000110,   4
7,    00000111,   4
8,    00001000,   0
9,    00001001,   0
10,   00001010,   0
11,   00001011,   0
12,   00001100,   4
13,   00001101,   4
14,   00001110,   4
15,   00001111,   4
16,   00010000,   0
17,   00010001,   0
18,   00010010,   0
19,   00010011,   0
20,   00010100,   4
UWSC
	FID = FOPEN(logpath, F_READ OR F_WRITE)
	FPUT(FID, datetime + string, 0, F_INSERT)
	FCLOSE(FID)
	FUKIDASI(string)
	SLEEP(0.010)
	FUKIDASI()

datetime(日時)とstring(ログの内容)を結合した文字列をlogpathに書き込みます。書き込む内容をPRINT文で記述するとログとして書き込まれてしまうのでFUKIDASI関数 (スクリプト関数)でログを表示しています。

UWSC
	FID = FOPEN(logpath, F_READ OR F_WRITE)
	DIM Maxrow = FGET(FID, F_LINECOUNT)
	DIM cnt = 0
	FOR row = Maxrow TO 1 STEP -1
		IF reTest(FGET(FID, row), "\d{2}\/\d{2}\/\d{2} \d{2}:\d{2}(?::\d{2})?  ") THEN cnt = cnt + 1
		IF cnt = loglines THEN BREAK
	NEXT
	DIM str = ""
	FOR i = row TO MaxRow
		str = str + FGET(FID, i) + "<#CR>"
	NEXT
	FPUT(FID, str, F_ALLTEXT)
	FCLOSE(FID)

loglinesに指定された行数分のログを残す処理を行っています。現在のログの行数を取得し、まず後ろから何行分取得すれば良いかを求めます。改行を含むログが出力される可能性もあるため、単純に後ろからloglinesの値だけ取得するということはできません。

ログは行頭に日時が必ず来るため、正規表現で行頭に日時が来る行をカウントしていきcntに代入します。cntloglinesの値と一致したとき、ループを抜けます。このときのrowの値がちょうどloglinesに一致するログの開始行となります。この行以降を取得すればloglinesに一致する分のログが取得できることになります。ループでstrにログを代入していき、最後にstrで全文書き換えを行いログを書き換えます。

loglinesに指定された数のログを取得し、strに代入していきます。

LogDeleteFlgは以前のログを削除するためのグローバル変数です。

以下はデスクトップ\UWSC.LOGテキストと出力します。logfile3(以前のログを残し、yy/mm/dd hh:nn:ss <ログの内容>の形式で出力)、loglines10(残すログの行数が10行)です。

UWSC
PUBLIC LogDeleteFlg = TRUE

CONST ssfDesktop = 0

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfDesktop)
DIM path = Folder.Self.Path + "\UWSC.LOG"

PRINT("テキスト", path, 3, 10)

ログの最大行数を変更(LOGLINES)

ログファイルの最大行数を変更します。デフォルトは2,000行です。

UWSC
OPTION LOGLINES = 500

ログ出力モード(LOGFILE)

ログの出力モードを指定します。

OPTION指定の書き方は以下のとおりです。

UWSC
OPTION LOGFILE = <数値>
数値 以前のログ
削除フラグ
形式
0(デフォルト) ○残す yy/mm/dd hh:nn <ログの内容>
1 ○残す (ログを出力しない)
2 ○残す <ログの内容>
3 ○残す yy/mm/dd hh:nn:ss <ログの内容>
4 ×削除 yy/mm/dd hh:nn <ログの内容>
5 ×削除 (ログを出力しない)
6 ×削除 <ログの内容>
7 ×削除 yy/mm/dd hh:nn:ss <ログの内容>
8 ○残す yy/mm/dd hh:nn <ログの内容>
9 ○残す (ログを出力しない)
10 ○残す <ログの内容>
11 ○残す yy/mm/dd hh:nn:ss <ログの内容>
12 ×削除 yy/mm/dd hh:nn <ログの内容>
13 ×削除 (ログを出力しない)
14 ×削除 <ログの内容>
15 ×削除 yy/mm/dd hh:nn:ss <ログの内容>
16 ○残す yy/mm/dd hh:nn <ログの内容>
17 ○残す (ログを出力しない)
18 ○残す <ログの内容>
19 ○残す yy/mm/dd hh:nn:ss <ログの内容>
20 ×削除 yy/mm/dd hh:nn <ログの内容>

表に示した結果から以下のような法則が成り立ちます。

数値を2進数にしたときの下位2ビットの値もしくは数値を4で割った余りでログの形式が決まります。

00(余り0)
yy/mm/dd hh:nn <ログの内容>
01(余り1)
ログを出力しない
10(余り2)
<ログの内容>
11(余り3)
yy/mm/dd hh:nn:ss <ログの内容>

下位3ビット目が1なら以前のログを削除、0なら削除しない。

以前のログはスクリプトで最初のPRINT文を実行し、 ログを出力したタイミングで削除されます。5,13は×削除ですが、ログが出力されないので以前のログは残ります。

ダイアログのタイトル変更(DLGTITLE)

ダイアログのタイトル変更

短絡評価

短絡評価たんらくひょうかとは、ANDORといった論理演算子において左辺を評価した時点で全体の真偽値が確定し右辺を評価する必要がない場合、右辺の評価をしないのが短絡評価です。一方で左辺・右辺ともに評価を行うのは完全評価といいます。

例えば、論理積(AND)の左辺を評価した結果がFALSEの場合、全体の評価はFALSEになるし、論理和(OR)の左辺を評価した結果がTRUEの場合、全体の評価はTRUEになります。

まず論理積(AND)の場合、左辺の評価がTRUEのときは右辺の評価もしなければならないが、左辺の評価がFALSEのときは右辺の評価に関わらず結果は必ずFALSEとなります。そのため左辺がFALSEの時点で右辺の評価はスキップします。

  1. TRUE AND TRUE → TRUE
  2. TRUE AND FALSE → FALSE
  3. FALSE AND TRUE → FALSE
  4. FALSE AND FALSE → FALSE

このような場合、右辺の結果は問わないので評価をスキップします。赤字の式は評価されずスキップします。

次に論理和(OR)の場合、左辺の評価がFALSEの場合右辺の評価しなければならないが、左辺の評価がTRUEのときは右辺の評価に関わらず結果は必ずTRUEになります。そのため左辺がTRUEの時点で右辺の評価はスキップします。

  1. TRUE OR TRUE → TRUE
  2. TRUE OR FALSE → TRUE
  3. FALSE OR TRUE → TRUE
  4. FALSE OR FALSE → FALSE

論理積のときと同様に赤字の処理はスキップされます。

そのため軽い処理を左辺、重い処理を右辺に持ってくると右辺が省略されるときは無駄な処理をせずに済みます。

左辺は必ず実行されるので、省略されては困る式を左辺に持ってくる書き方もありです。

以下の例ではOPTION SHORTCIRCUITの記述があるとORの左辺がTRUEなので右辺の処理を実行せずFalseを返し、記述がないと右辺も実行するのでTrueを返します。

UWSC
PUBLIC flg
flg = FALSE

IF TRUE OR test() THEN PRINT flg

PROCEDURE test()
	flg = TRUE
FEND
結果
プレーンテキスト
True
UWSC
OPTION SHORTCIRCUIT

PUBLIC flg
flg = FALSE

IF TRUE OR test() THEN PRINT flg

PROCEDURE test()
	flg = TRUE
FEND
結果
プレーンテキスト
False

論理積・論理和を使った擬似的なIF文

論理積
UWSC
左辺 AND 右辺

論理積の場合左辺がTRUEでないと右辺は実行されないので、

UWSC
IF 左辺 = TRUE THEN 右辺

と等価とみなすことができます。左辺が条件式、右辺が真のときの処理となる。

論理和
UWSC
左辺 OR 右辺

論理和の場合左辺がFALSEでないと右辺は実行されないので、

UWSC
IF 左辺 = FALSE THEN 右辺

と等価とみなすことができます。左辺の条件式が偽のとき右辺の処理が実行されます。

論理演算子が複数あるとき

論理演算子が複数あるときも1つのときと同様に左から順に評価していきます。

論理積(AND)の場合、初めてFALSEを返した次以降の処理をスキップします。赤字がスキップされる処理です。

  1. FALSE AND FALSE AND FALSE → FALSE
  2. FALSE AND FALSE AND TRUE → FALSE
  3. FALSE AND TRUE AND FALSE → FALSE
  4. FALSE AND TRUE AND TRUE → FALSE
  5. TRUE AND FALSE AND FALSE → FALSE
  6. TRUE AND FALSE AND TRUE → FALSE
  7. TRUE AND TRUE AND FALSE → FALSE
  8. TRUE AND TRUE AND TRUE → TRUE

論理和(OR)の場合、初めてTRUEを返した次以降の処理をスキップします。赤字がスキップされる処理です。

  1. FALSE OR FALSE OR FALSE→FALSE
  2. FALSE OR FALSE OR TRUE→TRUE
  3. FALSE OR TRUE OR FALSE→TRUE
  4. FALSE OR TRUE OR TRUE→TRUE
  5. TRUE OR FALSE OR FALSE→TRUE
  6. TRUE OR FALSE OR TRUE→TRUE
  7. TRUE OR TRUE OR FALSE→TRUE
  8. TRUE OR TRUE OR TRUE→TRUE

注意点

短絡評価は場合によって右辺の式スキップされるため、その式に関係する処理を行う場合注意が必要です。

短絡評価の例

以下は完全評価のため、fafbともに呼び出されます。

UWSC
IFB fa(FALSE) AND fb(FALSE) THEN
	// 処理
ENDIF

FUNCTION fa(arg)
	PRINT "faが呼び出されました"
	RESULT = arg
FEND

FUNCTION fb(arg)
	PRINT "fbが呼び出されました"
	RESULT = arg
FEND
結果
プレーンテキスト
faが呼び出されました
fbが呼び出されました

以下は短絡評価で、まずfaを実行しTRUEを返したため、fbも実行されます。

UWSC
OPTION SHORTCIRCUIT

IFB fa(TRUE) AND fb(TRUE) THEN
	// 処理
ENDIF

FUNCTION fa(arg)
	PRINT "faが呼び出されました"
	RESULT = arg
FEND

FUNCTION fb(arg)
	PRINT "fbが呼び出されました"
	RESULT = arg
FEND
結果
プレーンテキスト
faが呼び出されました
fbが呼び出されました

まずfaが実行されFALSEを返しこの時点でこの論理積の評価がFALSEと確定したので、fbは実行されません。

UWSC
OPTION SHORTCIRCUIT

IFB fa(FALSE) AND fb(TRUE) THEN
	// 処理
ENDIF

FUNCTION fa(arg)
	PRINT "faが呼び出されました"
	RESULT = arg
FEND

FUNCTION fb(arg)
	PRINT "fbが呼び出されました"
	RESULT = arg
FEND
結果
プレーンテキスト
faが呼び出されました

以下は完全評価で、fafbともに呼び出されます。

UWSC
IFB fa(TRUE) OR fb(TRUE) THEN
	// 処理
ENDIF

FUNCTION fa(arg)
	PRINT "faが呼び出されました"
	RESULT = arg
FEND

FUNCTION fb(arg)
	PRINT "fbが呼び出されました"
	RESULT = arg
FEND
結果
プレーンテキスト
faが呼び出されました
fbが呼び出されました

以下は短絡評価で、まずfaが実行されTRUEを返しこの時点でこの論理和の評価がTRUEと確定したので、fbは実行されません。

UWSC
OPTION SHORTCIRCUIT

IFB fa(TRUE) OR fb(TRUE) THEN
	// 処理
ENDIF

FUNCTION fa(arg)
	PRINT "faが呼び出されました"
	RESULT = arg
FEND

FUNCTION fb(arg)
	PRINT "fbが呼び出されました"
	RESULT = arg
FEND
結果
プレーンテキスト
faが呼び出されました

以下は短絡評価で、まずfaを実行しFALSEを返したため、fbも実行されます。

UWSC
OPTION SHORTCIRCUIT

IFB fa(FALSE) OR fb(TRUE) THEN
	// 処理
ENDIF

FUNCTION fa(arg)
	PRINT "faが呼び出されました"
	RESULT = arg
FEND

FUNCTION fb(arg)
	PRINT "fbが呼び出されました"
	RESULT = arg
FEND
結果
プレーンテキスト
faが呼び出されました
fbが呼び出されました