判定式は次のような構文で使用します。
判定式 ::= ( 論理式 [AND|OR 論理式 ...] )
論理式 ::= [NOT] FALSE | TRUE | システム判定式 | 比較式 | ユーザー定義関数(戻り値が論理値) | 判定式
です。再帰定義になってますね:- 要は判定式そのものをANDかORでくっつけて使用できる、ってことです。
システム判定式は、SASFが提供している組込みの式です。具体的にはreferenceを参照して下さい。
例) (EqNum(#i,0)) (NOT #i>=10) (MatchText($w,$r) AND (#i<100)) ( (IsDir($work) AND IsDir($newdir)) OR NOT UseUnlha() ) ( NOT ( IsFile($file) AND CheckLZH($file) ) ) (TRUE)
比較式とは、数字や文字列を直接==や<>などで比較したものです。
書式は以下の通りです。
数字 比較演算子 数字 文字列 比較演算子 文字列
== | 等しい |
!= | 等しくない |
<> | 等しくない |
< | 左 < 右 |
<= | 左 <= 右 |
=< | 左 <= 右 |
> | 左 > 右 |
>= | 左 >= 右 |
=> | 左 >= 右 |
文字列の比較は常に大文字・小文字を区別します。
また、比較演算子は演算子(+ - * / % & | ^)よりも優先順位は低いです。
注意 FALSE及びTRUEは、比較演算子が使えません。
例) IF (#a<=#b) THEN { ... }; WHILE ($newsec<>'') DO { ... }; REPEAT { ... } UNTIL (#Count!=10); IF (10<=#a+2) THEN { ... };
SASFでは、ANDまたはORで連結された判定式をチェックする場合、途中で真偽が確定した場合は、以後の判定式の評価を行わずにスキップします。
ANDの場合、ANDの以前の判定式が疑になった場合、次の判定式は評価せずに、疑として判定します。
ORの場合、ORの以前の式が真になった場合、次の判定式は評価せずに、真として判定します。
例) ( EqNum(#i,10) AND EqNum(#j,0) ) #i <> 10の場合、疑になり、#j = 0の評価は行われません。 #i = 10 の場合、続けて #j = 0 が評価されます。 例) ( EqNum(#i,10) OR EqNum(#j,0) ) #i = 10 の場合、真になり、#j=0 の評価は行われません。 #i <> 10 の場合、続けて #j=0の評価を行います。 例) ( EqNum(#i,10) AND EqNum(#j,0) OR EqNum(#k,90) ) #i<>10の場合、疑になり、以後は評価されません。 #i=10の場合、続けて#j=0を評価します。 #j=0の場合、真になり、以後は評価されません。 例) ( EqNum(#i,10) OR EqNum(#j,0) AND EqNum(#k,90) ) #i=10の場合、真になり、以後は評価されません。 #i<>10の場合、続けて#j=0を評価します。 #j<>0の場合、疑になり、以後は評価されません。