Skip to main content

論理積 (& または &&)

オペランドの両方の値が 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"}
      }
FeedbackOpens in a new tab