CDL演算子
演算子は、Unicode文字で構成される事前定義済トークンです。 これを使用して、オペランド間で実行時に実行する操作を指定します。
使用できる演算子
| 演算子タイプ | 演算子 | 説明 |
|---|---|---|
| 論理 | AND |
|
| 論理 | OR |
|
| 論理 | NOT |
|
| 論理 | REQUIRES |
|
| 論理 | IMPLIES |
|
| 論理 | EXCLUDES |
|
| 論理 | NEGATES |
|
| 論理および比較 | LIKE |
|
| 論理および比較 | 相似でない |
|
| 論理、算術および比較 | = |
|
| 論理、算術および比較 | > |
|
| 論理、算術および比較 | < |
|
| 論理、算術および比較 | <> |
|
| 論理、算術および比較 | <= |
|
| 論理、算術および比較 | >= |
|
| 計算 | * |
|
| 計算 | / |
|
| 計算 | - |
|
| 計算 | + |
|
| 計算 | ^ |
|
| 計算 | % |
|
| テキスト | + |
|
| Other | Assign(node) |
|
| Other | IncMin() |
|
| Other | ( ) |
|
| Other | , |
|
| Other | . |
|
| Other | - |
|
演算子のデータ型
| 演算子 | データ型 |
|---|---|
| 計算 |
整数 小数 |
| 論理 | Boolean |
| 比較 | Boolean |
各演算子の結果を別の演算子のオペランドとして使用できます。 これらの各演算子は、同じデータ型を使用する必要があります。 たとえば:
- 演算子xが10進数で、演算子yが10進数の場合は、xの結果をyのオペランドとして使用できます。
- 演算子xが10進数で、演算子yが10進数でない場合、xの結果をyのオペランドとして使用することはできません。
演算子の優先順位
コンフィギュレータは、次の演算子を処理する際にこの優先順位を使用します:
| 優先度 | 演算子 | 説明 |
|---|---|---|
| 1 (right) | () |
カッコ |
| 2 (right) | . |
ナビゲーション |
| 3 (right) | ^ |
算術パワー |
| 4 | 単項+、 - NOT |
単項プラスとマイナス、なし |
| 5 (left) | *, /, % |
算術乗算と除算 |
| 6 (left) | バイナリ+、- |
算術プラスとマイナス、テキスト連結 |
| 7 (left) | <, >, =, <=, >=, <> LIKE, NOT LIKE |
比較演算子 |
| 8 (left) | AND |
論理AND |
| 9 (left) | OR |
論理OR |
| 10 (left) | DEFAULTS, EXCLUDES, NEGATES, IMPLIES, REQUIRES |
論理演算子 |
2つ以上の演算子が同じ優先順位を持つ場合、コンフィギュレータはルールに表示されるとおりに演算子を左から右に処理します。
LIKE演算子およびNOT LIKE演算子
LIKE演算子およびNOT LIKE演算子を含めて、テキストを比較できます。
- 静的コンテキストでのみ使用できます。 たとえば、イテレータのWHERE句を使用できます。
- 演算子が定数文字列に評価される場合にのみ、ランタイム参加者でLIKEまたはNOT LIKEを使用できます。 コンフィギュレータは、モデルの保存時にこの条件を検証します。
LIKEを使用したブール値の取得
次の例について考えてみます:
a.attr.Value() LIKE "%eig%"
その仕組みは次のとおりです:
| a.attrのテキストに次が含まれている場合 | 次にコンフィギュレータ返品 |
|---|---|
eig (a.attr =weightやeightなど) |
true |
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" )
テキスト演算子の連結
+ (プラス記号)を使用して、テキストを連結できます。
- 静的テキストでのみ使用できます。 たとえば、イテレータのWHERE句で使用できます。
- 制約文またはコントリビュータ文が定数文字列に評価される場合にのみ、制約文またはコントリビュータ文の本文で使用します。 コンフィギュレータは、モデルの保存時にこの要件を検証します。
演算子の収集
Collectキーワードを使用してコレクションを作成し、コレクションを引数として使用できる演算子にコレクションを指定できます。 たとえば、AnyTrue(x, y, z)のかわりに、AnyTrue(COLLECT &c FOR ALL &c IN {x,y,z})を記述できます。