CDL演算子
演算子は、式オペランドの間で式演算子として使用されるUnicode文字で構成される事前定義されたトークンです。 演算子は、オペランド間の実行時に実行される操作を指定します。
このセクションの内容は次のとおりです:
-
CDLでサポートされる演算子
-
オペレータ結果
-
演算子の優先順位
-
LIKE演算子およびNOT LIKE演算子
-
テキスト連結演算子
-
COLLECT演算子
CDLでサポートされる演算子
次の表に、CDLでサポートされている事前定義済演算子を示します。
演算子タイプ |
演算子 |
説明 |
---|---|---|
論理 |
AND |
ANDには2つのオペランドが必要で、両方がtrueの場合はtrueを返します。 |
論理 |
OR |
ORには2つのオペランドが必要で、いずれかがtrueの場合はtrueを返します。 |
論理 |
NOT |
1つのオペランドを必要とせず、反対の値を返します: オペランドがtrueの場合はfalse、オペランドがfalseの場合はtrue。 |
論理 |
REQUIRES |
REQUIRESには2つのオペランドが必要です。 |
論理 |
IMPLIES |
IMPLIESには、2つのオペランドまたは詳細が必要です。 |
論理 |
EXCLUDES |
EXCLUDESには2つのオペランドが必要です。 |
論理 |
NEGATES |
NEGATESには2つのオペランドが必要です。 |
論理および比較 |
LIKE |
LIKEには2つのテキスト・リテラル・オペランドが必要で、一致する場合はtrueを返します。 制限については、LIKEおよびNOT LIKE演算子を参照してください。 |
論理および比較 |
相似でない |
LIKEには2つのテキスト・リテラル・オペランドが必要で、一致する場合はtrueを返します。 制限については、LIKEおよびNOT LIKE演算子を参照してください。 |
論理、算術および比較 |
= |
等しいには2つのオペランドが必要で、両方が同じ場合はtrueを返します。 |
論理、算術および比較 |
> |
より大きい場合は2つのオペランドが必要であり、最初のオペランドが2番目のオペランドより大きい場合はtrueを返します。 |
論理、算術および比較 |
< |
Less thanは2つのオペランドを必要とし、最初のオペランドが2番目のオペランドよりも小さい場合はtrueを返します。 |
論理、算術および比較 |
<> |
等しくないには2つのオペランドが必要であり、異なる場合はtrueを返します。 |
論理、算術および比較 |
<= |
次以下には2つのオペランドが必要で、最初のオペランドが2番目のオペランド以下の場合はtrueを返します。 |
論理、算術および比較 |
>= |
次以上には2つのオペランドが必要で、最初のオペランドが2番目のオペランド以上である場合は「true」を返します。 |
計算 |
* |
数値オペランドに対して算術乗算を実行します。 |
計算 |
/ |
数値オペランドに対して算術除算を実行します。 |
計算 |
- |
数値オペランドに対して算術減算を実行します。 |
計算 |
+ |
数値オペランドに対して算術加算を実行します。 |
計算 |
^ |
数値オペランドに対して算術指数を実行します。 |
計算 |
% |
数値オペランドに対して演算モジュロを実行します。 |
テキスト |
+ |
テキスト文字列を連結して実行します。 制限事項については、テキスト連結演算子を参照してください。 |
Other |
Assign(node) |
デフォルトおよび検索ディシジョンでのみ使用され、指定した順序の特定のポイントにノードを強制的にバインドします。 ノードの詳細ページでドメインの順序付け設定が指定されている場合は、この設定に従ってバインドが行われます。 それ以外の場合は、この演算子タイプに対する制約エンジンの暗黙的なバインド・メソッドが使用されます。 |
Other |
IncMin() |
デフォルトおよび検索ディシジョンでのみ使用されます。 ASSIGNと同様ですが、この演算子は、ノードをバインドするための明示的または暗黙的なドメイン順序付けメソッドをオーバーライドし、最小値を増やすバイナリ検索を使用してバインドを試みます。 この演算子は、数量のある品目およびオプションを含む整数および小数に対して有効です。 システム属性が明示的に参照されていない場合(状態、数量、値など)、ノードのデフォルト・システム属性に適用されます。 品目とともに使用する場合は、かわりにRelativeQuantity属性を指定できます。 |
Other |
( ) , . - |
カッコ()を使用して、サブ式をグループ化します。 カンマ(、)は、関数の引数を区切るために使用されます。 ドット(.)は、モデル・ツリー構造内のオブジェクトを参照するために使用されます。 単項マイナス(-)を使用すると、正の値が負および負の値が正になります。 |
オペレータ結果
各式演算子の結果は、前者の戻り型が後者の引数型と一致しているかぎり、別の演算子のオペランドとして参加できます。
次の表に、各タイプの演算子の基本的な戻りデータ型を示します。
演算子とデータ型のマッピング
演算子 |
データ型 |
---|---|
計算 |
INTEGER DECIMAL |
論理 |
BOOLEAN |
比較 |
BOOLEAN |
演算子の優先順位
演算子は、次の表に示す順序で処理されます。 等しい優先順位の演算子は、左から右に評価されます。
次の表に、CDLの式演算子の優先順位を示します。 列は、演算子、優先順位(方向)および説明です。
演算子の優先順位
演算子 |
優先順位(方向) |
説明 |
---|---|---|
|
1 (right) |
カッコ |
|
2 (right) |
ナビゲーション |
|
3 (right) |
算術パワー |
単項 |
4 |
単項プラスとマイナス、なし |
|
5 (left) |
算術乗算と除算 |
バイナリ |
6 (left) |
算術プラスとマイナス、テキスト連結 |
|
7 (left) |
比較演算子 |
|
8 (left) |
論理AND |
|
9 (left) |
論理OR |
|
10 (left) |
論理演算子 |
LIKE演算子およびNOT LIKE演算子
LIKEおよびNOT LIKEはテキスト関係演算子として含まれていますが、静的コンテキスト(イテレータのWHERE句など)でのみ使用できます。 TEXTデータ型と同様に、LIKEおよびNOT LIKEは、定数の文字列に評価されないかぎり、ランタイム参加者では使用できません。 コンフィギュレータは、モデルをコンパイルするときにこの条件を検証します。
LIKE式によるBOOLEAN値
a.attr.Value() LIKE "%eig%"
a.attrのテキストにa.attr ='weight'や'eight'などの文字eigが含まれている場合は、TRUEの結果が返されます。 a.attr='rein''というテキストの場合、FALSEが返されます。
次の例では、オプションAおよびBを選択すると、関連するユーザー定義属性の値がA1B1の場合にC内のオプションが選択されることを意味します。
Constrain Alltrue('A','B') implies &C
for all &C in {optionsof('C')}
where &C.userAttrs["Selections.AB Compatibility"] like "A1B1"
次の例では、オプションAおよびBを選択すると、関連するユーザー定義属性の値がA1B1以外の場合にC内のオプションが選択されることを意味します。
Constrain Alltrue('A','B') implies &C
for all &C in {optionsof('C')}
where not (&C.userAttrs["Selections.AB Compatibility"] like "A1B1" )
比較演算子のリストは、CDLでサポートされている演算子を参照してください。
テキスト連結演算子
+
はテキスト連結演算子として含まれていますが、静的コンテキスト(イテレータのWHERE句など)でのみ使用できます。 TEXTデータ型と同様に、constrain文またはcontributor文の実際の本文でテキスト連結は、定数文字列に評価されないかぎり使用できません。 コンフィギュレータは、モデルをコンパイルするときにこの条件を検証します。
COLLECT演算子
COLLECTキーワードは、コレクションを構築し、コレクションを引数として取る演算子に提供するために使用されます。 たとえば、AnyTrue(x, y, z)のかわりに、AnyTrue(COLLECT &c FOR ALL &c IN {x,y,z})を記述できます。