---
schema_version: "1"
id: 979327d937366f368ebfeb483fe031383330ed65536cad285e77a9749528eb78
title: DataWeave での優先順位
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/dataweave/2.7/dataweave-flow-control-precedence.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.7/dataweave-flow-control-precedence
source_site: docs.mulesoft.com
content_type: documentation
content_hash: eef647447f0c48fbdf6fb05cf6c9d50c83d0de63221b86843b6368359e8926e0
description: MuleSoft Documentation Site
release: "2.7"
latest: false
---
# DataWeave での優先順位

DataWeave 式は特定の順序でコンパイルされます。1 つのレベルのコンパイル結果をより高いレベルの式の入力として使用することはできますが、より低いレベルの式の入力として使用することはできません。 開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、​[DataWeave バージョン 1.2 のドキュメント](#1.2@dataweave::index.adoc)​を参照してください。 他の Mule バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。

## [](#コンパイルの順序)コンパイルの順序

次の表では、演算子と関数を、最初にコンパイルされるもの (1) から最後にコンパイルされるもの (10) への順に並べています。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 11.1111%;">
<col style="width: 88.8889%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">レベル</th>
<th class="tableblock halign-left valign-top">演算子または関数</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p><code>using</code>​: DataWeave スクリプトでローカル変数を初期化するために使用。</p>
</li>
<li>
<p>このレベルの DataWeave 単項演算子:</p>
<div class="ulist">
<ul>
<li>
<p><code>.^</code>​: スキーマセレクター。</p>
</li>
<li>
<p><code>.#</code>​: 名前空間セレクター。</p>
</li>
<li>
<p><code>..</code>​: 子孫セレクター。</p>
</li>
<li>
<p><code>not</code>​: 否定の論理演算子。</p>
</li>
<li>
<p><code>.@</code>​: 全属性セレクター。オブジェクトの配列 ​<code>{ "attr1": "foo", "attr2": "bar" }</code>​ 内で入力ペイロード ​<code>&lt;root&gt; &lt;a attr1="foo" attr2="bar" /&gt;&lt;/root&gt;</code>​ の属性と値を返す式 ​<code>payload.root.a.@</code>​ を使用する場合などで使用。</p>
</li>
</ul>
</div>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p><code>as</code>​: 型強制に使用。</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p><code>*</code>​: 乗算。</p>
</li>
<li>
<p><code>/</code>​: 除算。</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p><code>+</code>​: 加算。</p>
</li>
<li>
<p><code>-</code>​: 減算。</p>
</li>
<li>
<p><code>&gt;&gt;</code>​: データを先頭に追加。</p>
</li>
<li>
<p><code>&lt;&lt;</code>​: データを末尾に付加。</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p><code>&gt;</code>​: 以上。</p>
</li>
<li>
<p><code>=</code>​: 等しい。</p>
</li>
<li>
<p><code>&lt;</code>​: 以下。</p>
</li>
<li>
<p><code>&lt;</code>​: より小さい</p>
</li>
<li>
<p><code>&gt;</code>​: より大きい。</p>
</li>
<li>
<p><code>is</code>​: 型を比較。​<a href="https://docs.mulesoft.com/jp/dataweave/2.7/dataweave-cookbook-remove-certain-xml-attributes" class="xref page">指定した XML 属性の削除</a>​などで使用。</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p><code>!=</code>​: 等しくない。</p>
</li>
<li>
<p><code>~=</code>​: 含む。</p>
</li>
<li>
<p><code>==</code>​: 値の型が異なる場合、等価演算子は、1 つの値をもう 1 つの値の型に強制変換しようとします。</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">7</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p><code>and</code>​: <code>and</code>​ 論理演算子。</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p><code>or</code>​: <code>or</code>​ 論理演算子。</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">9</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p><code>default</code>​: デフォルト値の設定に使用。</p>
</li>
<li>
<p><code>case</code>​ と ​<code>else</code>​: パターン一致に使用。</p>
</li>
<li>
<p>このレベルの DataWeave 関数:</p>
<div class="ulist">
<ul>
<li>
<p><code>matches</code>​</p>
</li>
<li>
<p><code>match</code>​</p>
</li>
<li>
<p><code>map</code>​</p>
</li>
<li>
<p><code>mapObject</code>​</p>
</li>
<li>
<p><code>groupBy</code>​</p>
</li>
<li>
<p><code>filter</code>​</p>
</li>
</ul>
</div>
</li>
<li>
<p>このレベルの DataWeave バイナリセレクター:</p>
<div class="ulist">
<ul>
<li>
<p><code>.@keyName</code>​ と ​<code>.*@</code>​: DataWeave バイナリ属性セレクター。</p>
</li>
<li>
<p><code>.*</code>​: 複数値セレクター。</p>
</li>
<li>
<p><code>.^</code>​: メタデータセレクター。</p>
</li>
<li>
<p><code>.&amp;</code>​: キー/値ペアセレクター</p>
</li>
<li>
<p><code>[?()]</code>​: 絞り込みセレクター</p>
</li>
</ul>
</div>
</li>
<li>
<p><code>.keyName</code>​: 値セレクター。</p>
</li>
<li>
<p><code>[&lt;index&gt; to &lt;index&gt;]</code>​: 範囲セレクター。</p>
</li>
</ul>
</div></div></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">10</p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="ulist">
<ul>
<li>
<p><code>if else</code>​: DataWeave でのフロー制御に使用する条件式。</p>
</li>
</ul>
</div></div></td>
</tr>
</tbody>
</table>

## [](#チェーニングされた関数コールの順序)チェーニングされた関数コールの順序

複数の関数がチェーニングによって 1 つにまとめられると、それらの関数はチェーンで指定された順序で最初の関数から最後の関数まで処理されます。

たとえば、次のスクリプトは、変数 ​`flights`​ によって定義された入力オブジェクトの配列に対して動作します。スクリプトは最初に 500 未満の ​`price`​ 値をすべて受け入れる配列を返す ​`filter`​ をコールします。次に、入力内のオブジェクトを ​`price`​ 値が低い順に並び替えた配列を返す ​`orderBy`​ をコールします。最後に、入力オブジェクト配列を ​`toAirport`​ 値のアルファベット順にグループ化する ​`groupBy`​ をコールします。

DataWeave スクリプト:

```DataWeave
%dw 2.0
output application/json
var flights = [
  { "toAirport": "SFO", "price": 550, "airline": "American" },
  { "toAirport": "MUA", "price": 200, "airline": "American" },
  { "toAirport": "SFO", "price": 300, "airline": "American" },
  { "toAirport": "CLE", "price": 600, "airline": "American" },
  { "toAirport": "CLE", "price": 190, "airline": "American" },
  { "toAirport": "SFO", "price": 400, "airline": "American" }
]
---
flights filter $.price < 500 orderBy $.price groupBy $.toAirport
```

結果は、キー-値ペアのコレクションを含むオブジェクトになります。

出力:

{
  "CLE": \[
    {
      "toAirport": "CLE",
      "price": 190,
      "airline": "American"
    }
  \],
  "SFO": \[
    {
      "toAirport": "SFO",
      "price": 300,
      "airline": "United"
    },
    {
      "toAirport": "SFO",
      "price": 400,
      "airline": "American"
    }
  \],
  "MUA": \[
    {
      "toAirport": "MUA",
      "price": 200,
      "airline": "American"
    }
  \]
}

DataWeave 式に括弧 ​`(`​ および ​`)`​ を挿入することで、評価の順序を指定できます。次の例は、前の例と同じ出力を返します。

DataWeave スクリプト:

```DataWeave
%dw 2.0
output application/json
var flights = [
  { "toAirport": "SFO", "price": 550, "airline": "American" },
  { "toAirport": "MUA", "price": 200, "airline": "American" },
  { "toAirport": "SFO", "price": 300, "airline": "American" },
  { "toAirport": "CLE", "price": 600, "airline": "American" },
  { "toAirport": "CLE", "price": 190, "airline": "American" },
  { "toAirport": "SFO", "price": 400, "airline": "American" }
]
---
( ( ( flights filter $.price < 500 ) orderBy $.price ) groupBy $.toAirport )
```

結果は、キー-値ペアのコレクションを含むオブジェクトになります。

出力:

{
  "CLE": \[
    {
      "toAirport": "CLE",
      "price": 190,
      "airline": "American"
    }
  \],
  "SFO": \[
    {
      "toAirport": "SFO",
      "price": 300,
      "airline": "United"
    },
    {
      "toAirport": "SFO",
      "price": 400,
      "airline": "American"
    }
  \],
  "MUA": \[
    {
      "toAirport": "MUA",
      "price": 200,
      "airline": "American"
    }
  \]
}

関数コールの順序は重要です。たとえば、順序を変更した式 ​`flights groupBy $.toAirport filter $.price < 500 orderBy $.price`​ は、エラーを返します。これは、​`groupBy`​ はオブジェクトを返し、​`filter`​ は配列を想定しているためです。結果のエラーは ​`Expecting Type: Array>T<, but got: {String: Array<{|toA…​ airline: String|}>}`​ となります。

## [](#関連情報)関連情報

- [コア (dw::Core) 関数](https://docs.mulesoft.com/jp/dataweave/2.7/dw-core)
- [DataWeave の演算子](https://docs.mulesoft.com/jp/dataweave/2.7/dw-operators)
- [DataWeave セレクター](https://docs.mulesoft.com/jp/dataweave/2.7/dataweave-selectors)
- [DataWeave 変数](https://docs.mulesoft.com/jp/dataweave/2.7/dataweave-variables)
- [DataWeave のフローコントロール](https://docs.mulesoft.com/jp/dataweave/2.7/dataweave-flow-control)
- [DataWeave のパターン一致](https://docs.mulesoft.com/jp/dataweave/2.7/dataweave-pattern-matching)
- [DataWeave を使用した型の強制](https://docs.mulesoft.com/jp/dataweave/2.7/dataweave-types-coercion)