Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

[ Image Removed |../../index.htm#lansa/ladtgub3_0330.htm]
現在地:

...

8.4.9 *ANDIF論理演算子と*ORIF論理演算子

RDMLXでは、*AND論理演算子と*OR論理演算子をサポートしています。以下は、これらの演算子の構文を示したコード・フラグメントです。 ConditionalExpression1 *OR  ConditionalExpression2 ConditionalExpression1 *AND ConditionalExpression2  
どちらの演算子も、演算子の両側にある2つの条件式を完全に評価してから、それぞれのブール値の結果を1つの論理結果として組み合わせます。したがって、第1の条件式の結果に基づいて、第2の条件式の計算を停止する方法はありません。
ところが、第1の条件式の結果に基づいて、第2の条件式の計算を停止する場合もあります。旧リリースでは、論理演算子を以下のように使用して、いわゆる短絡評価を記述していました。
If_Ref Com(#ReferenceOne) Is

     ConditionalExpression1 *OR  ConditionalExpression2
ConditionalExpression1 *AND ConditionalExpression2

どちらの演算子も、演算子の両側にある2つの条件式を完全に評価してから、それぞれのブール値の結果を1つの論理結果として組み合わせます。したがって、第1の条件式の結果に基づいて、第2の条件式の計算を停止する方法はありません。 

ところが、第1の条件式の結果に基づいて、第2の条件式の計算を停止する場合もあります。旧リリースでは、論理演算子を以下のように使用して、いわゆる短絡評価を記述していました。 

     If_Ref Com(#ReferenceOne) Is_Not(*null)

...


  If Cond('#ReferenceOne.

...

Left <= 0')
  Set #ReferenceOne Left(100)
  Endif
Endif

つまり、2つの条件コマンドを記述する必要がありました。第1の条件コマンドでは、#ReferenceOne変数がNULLでない(したがって、参照可能である)ことを確認します。第2の条件コマンドでは、SETコマンドの実行前にコンポーネントの状態をチェックします。 ことを確認します。第2の条件コマンドでは、SETコマンドの実行前にコンポーネントの状態をチェックします。 

RDMLXでは、*ANDIF演算子と*ORIF演算子を使用した短絡評価をサポートしています。 ORIF演算子を使用した短絡評価をサポートしています。 

*ANDIF演算子は、第1の条件式がTrueを返した場合にのみ第2の条件式を実行します。*ORIF演算子は、第1の条件式がFalseを返した場合にのみ第2の条件式を実行します。 ORIF演算子は、第1の条件式がFalseを返した場合にのみ第2の条件式を実行します。  したがって、上の例は、以下のように記述できます。
If Cond( (#ReferenceOne *IsNot 

したがって、上の例は、以下のように記述できます。 

     If Cond( (#ReferenceOne *IsNot *Null)

...

 *

...

AndIf (#ReferenceOne.

...

Left <= 0))
Set #ReferenceOne Left(100)
Endif

...

...

例 

以下は、*ORIF演算子と*ANDIF演算子の使用法を示したコード・フラグメントです。 ANDIF演算子の使用法を示したコード・フラグメントです。 

     ...
DEFINE_

...

COM CLASS(#DEPTMENT)

...

 NAME(#DEPARTMENT)

...


SET COM(#COM_OWNER)

...

 PSCENARIO('(

...

#ReferenceOne *

...

isnot *null)

...

 *

...

andif (#ReferenceOne.

...

Left <= 0))')
(#ReferenceOne.

...

Left <= 0))
IF COND((#DEPTMENT *IsNot *null)

...

 *

...

AndIf (#DEPTMENT.

...

Value =

...

 ADM))

...


SET COM(#pass)

...

 VALUE(TRUE)

...


ENDIF

SET COM(#COM_OWNER)

...

 PSCENARIO('

...

if (#DEPTMENT.

...

value =

...

 FIN)

...

 *

...

orif (#section.

...

value =

...

  ''05'')')

...


IF ((#DEPTMENT.

...

value =

...

 ADM)

...

 *

...

OrIf (#section.

...

value =

...

 '05'))

...


SET COM(#pass)

...

 VALUE(TRUE)

...


ENDIF

SET COM(#COM_OWNER)

...

 PSCENARIO('

...

if cond(

...

 (#COM_OWNER.

...

ComponentPatternName =

...

 QAP308)

...

 *

...

andif (#com_self.

...

componentpatternname =

...

 QAP308))')

...


IF ((#COM_OWNER.

...

ComponentPatternName =

...

 QAP308)

...

 *

...

AndIf (#com_self.

...

componentpatternname =

...

 QAP308))

...


SET COM(#pass)

...

 VALUE(TRUE)

...


ENDIF
...