演算子
演算子は値を組み合わせて新しい値を作成します。算術演算子や比較演算子など、ほとんどの演算子は他の言語と同じように動作します。 WEL固有の演算子は2つあります。
_ は、これらの例で式が受け取る入力です。詳細については、入力変数を参照してください。
機能の提供状況
WELは現在、一部のお客様にご利用いただけます。ご利用のワークスペースで利用可能かどうかを確認するには、Customer Success Representativeにお問い合わせください。
優先順位
次の表に、演算子を優先順位別に示します。表の上位にある演算子は、式内の位置に関係なく、下位にある演算子より先に実行されます。かっこ(())は優先順位を上書きします。式の一部をかっこで囲むと、その部分が先に評価されます。
| 優先順位 | 演算子 | 意味 |
|---|---|---|
| 1 | . () | フィールドアクセス、関数呼び出し |
| 2 | ! not - | 単項プレフィックス |
| 3 | ^ | べき乗 |
| 4 | * / % | 乗算、除算、剰余 |
| 5 | + - | 加算、減算 |
| 6 | ++ >> | |? | 連結、パイプ、フォールバック、tryフォールバック |
| 7 | == != < > <= >= in | 比較と包含 |
| 8 | and | 論理AND |
| 9 | or | 論理OR |
算術
+ - * / % ^はInteger、Float、Decimalで動作します。
| 操作 | Formula | 結果 |
|---|---|---|
+: 加算 | 1 + 2.5 | 3.5 |
-: 減算 | 5 - 2 | 3 |
*: 乗算 | 4 * 3 | 12 |
/: 除算 | 10 / 3 | 3 |
%: 剰余 | 10 % 3 | 1 |
^: べき乗(指数) | 2 ^ 10 | 1024 |
INTEGER除算では切り捨てが行われます
2つのInteger値を除算すると、結果は切り捨てられます。小数の結果を得るには一方をFloatまたはDecimalにし、金額にはDecimalを使用します。例:
| Formula | 結果 |
|---|---|
10 / 3 | 3 |
10.0 / 3 | 3.3333333333333335 |
ゼロで除算すると、無限大を生成するのではなくE200が発生します。
DecimalとFloatは混在できません。算術をサポートする型については、データ型を参照してください。
日付と期間
演算子は時間データ型でも動作します。 PlainDateにIntegerを加算すると日数を追加し、2つの日付を減算するとその間の日数を返し、2つの時点を減算するとDurationを返します。月の長さによって答えが変わるカレンダー計算では、代わりにadvance_dateまたはadd_monthsを使用します。
| 操作 | Formula | 結果 |
|---|---|---|
+: 日付に日数を追加 | PlainDate('2026-03-15') + 10 | 2026-03-25 |
-: 2つの日付を減算(日数) | PlainDate('2026-03-15') - PlainDate('2026-01-01') | 73 |
+: 時点に期間を追加 | DateTime('2026-01-01T10:00:00Z') + Duration('PT2H') | 2026-01-01T12:00:00Z |
-: 2つの時点を減算(期間) | DateTime('2026-03-01T00:00:00Z') - DateTime('2026-01-01T00:00:00Z') | PT1416H |
連結
++は同じ型の2つの値を結合します。
| 操作 | Formula | 結果 |
|---|---|---|
++: 2つの文字列を結合 | 'SO-' ++ '1001' | SO-1001 |
++: 2つのリストを結合 | [1, 2] ++ [3] | [1, 2, 3] |
型を混在させるとE101が発生します。 'x' ++ 1はエラーであり、x1ではありません。 String(...)で変換するか、補間時に変換するf-stringを使用します。
パイプライン演算子
>>は、左側の値を右側の関数の最初の引数として渡します。
| 操作 | Formula | 結果 |
|---|---|---|
>>: 値を関数にパイプ | 'acme' >> upper | ACME |
パイプラインは、ステップが実行される順序で左から右に読めます。次の例では、最初にlower、次にtrim、次にupperが実行されます。
_.email >> lower >> trim >> upperネストされた呼び出しでもパイプラインと同じ結果を得られますが、変換を内側から外側へ読む必要があります。
upper(trim(lower(_.email)))これは、ネストするとすぐに読みづらくなるラムダでは特に重要です。
フォールバック
フォールバック演算子は、異なる問題を解決します。
Null値フォールバック
|はnull値を処理します。
| 操作 | Formula | 結果 |
|---|---|---|
|: nullの場合にデフォルト値を使用 | null | 'default' | デフォルト |
presenceは、空の文字列、空白のみの文字列、空のリスト、空のマップを含むすべての種類の欠落をnullとして報告するため、1つのフォールバック演算子(|)ですべてをキャッチできます。
presence(_.display_name) | 'Unknown'エラーフォールバック
|?はエラーをキャッチします。
| 操作 | Formula | 結果 |
|---|---|---|
|?: 式がキャッチ可能なエラーを発生させた場合にデフォルト値を使用 | 1 / 0 |? 'error' | エラー |
存在しないフィールドを読み取ると、nullを生成するのではなくE104が発生します。そのため、|はそれをキャッチせず、|?はキャッチします。
_.customer.nickname |? 'none'キャッチ可能なエラーについては、エラーコードを参照してください。
フォールバックは判断であり、修正ではありません
|? 0を通貨フィールドで使用すると、不正な形式の金額が気づかれずに0になり、ジョブは成功として報告されます。それが正しい場合もあれば、誤った請求書が気づかれずに送信される場合もあります。
欠落が想定され、デフォルト値が本当に正しい場合にのみ、フォールバックを使用してください。そうでない場合は、エラーを伝播させてください。失敗したジョブは目に見えますが、誤った数値は目に見えません。
比較
== != < > <= >=は2つの値を比較します。
| 操作 | Formula | 結果 |
|---|---|---|
==: 等しい | 1 == 1.0 | true |
!=: 等しくない | 1 != 2 | true |
<: 未満 | 1 < 2 | true |
>: より大きい | 2 > 1 | true |
<=: 以下 | 2 <= 2 | true |
>=: 以上 | 2 >= 3 | false |
数値比較は値で行われるため、同じ数値を保持するIntegerとFloatは等しくなります。
同じに見えるテキストでも、同じ文字が複数の方法で保存されることがあるため、常に等しいとは限りません。 2つの異なるシステムのテキストを比較するには、unicode_compareを使用します。
包含
inは、値がリストの要素であるかどうかをテストします。
| 操作 | Formula | 結果 |
|---|---|---|
in: リストメンバーシップをテスト | 2 in [1, 2, 3] | true |
inはリスト専用です。他の型には、次の代替手段のいずれかを使用します。
- 部分文字列: contains?を使用します。
'WID' in 'WID-1'はE101を発生させます。 - マップキー: has_key?を使用します。
'a' in {a: 1}はE101を発生させます。
論理
and、or、notは単語で記述します。
| 操作 | Formula | 結果 |
|---|---|---|
and: 論理AND | 5 > 3 and 2 < 1 | false |
or: 論理OR | 5 > 3 or 2 < 1 | true |
not: 論理否定 | not true | false |
条件
if ... then ... else ...は式です。値を生成するため、値を置ける場所ならどこにでも使用できます。
| 操作 | Formula | 結果 |
|---|---|---|
if...then...else: 条件式 | if 5 > 3 then 'yes' else 'no' | yes |
次の例は、マップ内の条件を示しています。
{
tier: if _.total > 1000 then 'gold' else 'standard'
}関連情報
最終更新日: