Page History
[ |../../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
...