論理積 (& または &&)
オペランドの両方の値が True (1) であるかどうかをテストします。
詳細
論理積演算子は、オペランドの両方の値が True (1) であるかどうかをテストします。オペランドが両方とも True の場合 (つまり、数値として計算した場合、ゼロ以外の値となる)、ObjectScript は、True (1) を返します。それ以外の場合、False (0) を返します。
論理積演算子には、以下の 2 つの形式があります。
-
& 演算子は、両方のオペランドを評価し、いずれかのオペランドの値がゼロの場合、False (0) を返します。それ以外は True (1) を返します。
-
&& 演算子は、左のオペランドを評価し、そのオペランドの値がゼロの場合、False (0) を返します。左のオペランドがゼロ以外の場合にのみ、&& 演算子は右のオペランドを評価します。右のオペランドの評価がゼロの場合、False (0) を返します。それ以外は True (1) を返します。
例
以下の例は、2 つのゼロ以外のオペランドを True と評価して True (1) を返します。
SET A=-4,B=1
WRITE A&B // TRUE (1)
SET A=-4,B=1
WRITE A&&B // TRUE (1)
以下の例は、True と False のオペランドをそれぞれ評価して False (0) を返します。
SET A=1,B=0
WRITE "A = ",A,!
WRITE "B = ",B,!
WRITE "A&B = ",A&B,! // FALSE (0)
SET A=1,B=0
WRITE "A&&B = ",A&&B,! // FALSE (0)
以下の例は、& 演算子と && 演算子の違いを示します。以下の例では、左のオペランドは False (0) と評価され、右のオペランドは定義されていません。この場合、& と && 演算子の結果が異なることに注意してください。
-
& 演算子は両方のオペランドを評価し、<UNDEFINED> エラーを生じます。
TRY { KILL B SET A=0 WRITE "variable A defined?: ",$DATA(A),! WRITE "variable B defined?: ",$DATA(B),! WRITE A&B WRITE !,"Success" RETURN } CATCH exp { IF 1=exp.%IsA("%Exception.SystemException") { WRITE !,"System exception",! WRITE "Name: ",$ZCVT(exp.Name,"O","HTML"),! WRITE "Data: ",exp.Data,!! } ELSE { WRITE "not a system exception"} }
-
&& 演算子は左のオペランドのみを評価し、False (0) を返します。
TRY { KILL B SET A=0 WRITE "variable A defined?: ",$DATA(A),! WRITE "variable B defined?: ",$DATA(B),! WRITE A&&B WRITE !,"Success" RETURN } CATCH exp { IF 1=exp.%IsA("%Exception.SystemException") { WRITE !,"System exception",! WRITE "Name: ",$ZCVT(exp.Name,"O","HTML"),! WRITE "Data: ",exp.Data,!! } ELSE { WRITE "not a system exception"} }