---
schema_version: "1"
id: 9c04341f86b2978157bdc6765df2683d25a9eb6dcb1a03b317a4184776ef20c0
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.md
canonical_url: https://docs.mulesoft.com/jp/dataweave/2.7/dataweave-flow-control
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 5831ba1f94d794b62285257b4c8282bbb48ed70b39499549dee67cd2abdeb604
description: MuleSoft Documentation Site
release: "2.7"
latest: false
---
# DataWeave のフローコントロールとスコープ操作

次の演算子を任意の DataWeave 式内で使用できます。

- [`do`](#control_flow_do)
- [`if else`](#control_flow_if_else)
- [`else if`](#control_flow_else_if)

開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、​[DataWeave バージョン 1.2 のドキュメント](#1.2@dataweave::index.adoc)​を参照してください。 他の Mule バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。

## [](#control_flow_do)`do`

`do`​ ステートメントはスコープを作成します。このスコープ内で、新しい変数、関数、アノテーション、または名前空間を宣言し、使用できます。構文は、​`---`​ で区切られたヘッダーと本文で構成されるという点でマッピングに似ています。このヘッダーはすべての宣言を定義する場所であり、本文は式の結果です。

この例では、スクリプトの本文から ​`myfun()`​ がコールされたときに、​`do`​ を使用して文字列 ​`"DataWeave"`​ を返します。

DataWeave スクリプト:

```dataweave
%dw 2.0
output application/json
fun myfun() = do {
    var name = "DataWeave"
    ---
    name
}
---
{ result: myfun() }
```

この例では、スクリプトの本文から変数 ​`myVar`​ が参照されたときに、​`do`​ を使用して文字列 ​`"DataWeave"`​ を返します。

DataWeave スクリプト:

```dataweave
%dw 2.0
output application/json
var myVar = do {
    var name = "DataWeave"
    ---
    name
}
---
{ result: myVar }
```

どちらのスクリプトも次の出力を生成します。

出力:

```json
{
  "result": "DataWeave"
}
```

次の例では、​`do`​ を使用して、​`test(p: String)`​ 関数に渡す文字列 (​`" Bar"`​) の先頭に文字列 ​`"Foo"`​ を追加します。

DataWeave スクリプト:

```dataweave
%dw 2.0
output application/json
fun test(p: String) = do {
    var a = "Foo" ++ p
    ---
    a
}
---
{ result: test(" Bar") }
```

出力:

```json
{
  "result": "Foo Bar"
}
```

[「例: ローカル DataWeave 変数」](https://docs.mulesoft.com/jp/dataweave/2.7/dataweave-variables#example_local_variable)​も参照してください。

## [](#control_flow_if_else)`if else`

`if`​ ステートメントは条件式を評価し、条件式が ​`true`​ を返した場合のみ、​`if`​ の下の値を返します。それ以外の場合、​`else`​ の下の式を返します。各 ​`if`​ 式に、対応する ​`else`​ 式が必要です。

次の例では、ヘッダーで ​`myVar`​ 変数によって定義された入力 ​`{ country : "FRANCE" }`​ を使用します。

DataWeave スクリプト:

```dataweave
%dw 2.0
var myVar = { country : "FRANCE" }
output application/json
---
if (myVar.country == "USA")
  { currency: "USD" }
else { currency: "EUR" }
```

出力:

{
  "currency": "EUR"
}

if-else 構文は、数学ステートメント、論理ステートメント、等価ステートメント、比較ステートメントなど、​`true`​ または ​`false`​ に評価されるすべての条件に対して指定できます。条件は、有効な入力に対してのみ適用されます。

次の DataWeave スクリプトは、次の条件ステートメントの結果に ​`if else`​ ステートメントを適用します。

- `ex1`​ の算術演算  
    `if else`​ ステートメントは、演算 ​`1 + 1 == 55`​ が true であれば ​`true`​ を返し、そうでなければ ​`false`​ を返します。
- `ex2`​ の等価演算  
    `if else`​ ステートメントは、指定されたインデックスが ​`1`​ であれば ​`1`​ を返し、​`1`​ でなければ文字列を返します。
- `ex3`​ の ​`isEmpty`​ 関数  
    `if else`​ ステートメントは、​`aRecord.bookId`​ に値が含まれているかどうかによって ​`"ID is empty"`​ または ​`"ID is not empty"`​ を返します。
- `firstInput`​ を反復処理する ​`ex4`​ のマッピング  
    `if else`​ は、値が ​`101`​ と等しければ ​`bookId`​ の値を数値として返します。値が ​`101`​ と等しくなければ、指定された文字列を返します。

DataWeave スクリプト:

```dataweave
%dw 2.0
var aRecord =
 [
    "bookId":"101",
    "title":"world history",
    "price":"19.99"
 ]
output application/xml
---
{ examples:
	{
	   ex1 : if (1 + 1 == 55) true
	         else false,
	   ex2 : if ([1,2,3,4][1] == 1) 1
	         else "value of index 1 is not 1",
	   ex3 : if (isEmpty(aRecord.bookId)) "ID is empty"
	  	 else "ID is not empty",
	   ex4 : aRecord.bookId map (idValue) ->
	   	 if (idValue as Number == 101) idValue as Number
		 else "not 101"
	}
}
```

出力:

<?xml version='1.0' encoding='UTF-8'?>
<examples>
  <ex1>false</ex1>
  <ex2>value of index 1 is not 1</ex2>
  <ex3>ID is not empty</ex3>
  <ex4>101</ex4>
</examples>

[「DataWeave の演算子」](https://docs.mulesoft.com/jp/dataweave/2.7/dw-operators)​にも例が掲載されています。

## [](#control_flow_else_if)`else if`

`else if`​ を組み込むことで、if-else 構造内で複数の ​`else`​ 式をまとめてチェーニングできます。 次の例では、ヘッダーで ​`myVar`​ 変数によって定義された入力 ​`var myVar = { country : "UK" }`​ を使用します。

DataWeave スクリプト:

```dataweave
%dw 2.0
var myVar = { country : "UK" }
output application/json
---
if (myVar.country =="USA")
	{ currency: "USD" }
else if (myVar.country =="UK")
	{ currency: "GBP" }
else { currency: "EUR" }
```

出力

{
  "currency": "GBP"
}

次の例も同様ですが、オブジェクトではなく配列を入力として取ります。スクリプトの本文では、​`do`​ 操作で ​`if else`​ ステートメントと ​`else if`​ ステートメントを使用して、​`hello`​ 変数に値を入力します。

DataWeave スクリプト:

```dataweave
%dw 2.0
output application/json
---
["Argentina", "USA", "Brazil"] map (country) -> do {
  var hello = if(country == "Argentina") "Hola"
   else if(country == "USA") "Hello"
   else if(country == "Brazil") "Ola"
   else "Sorry! We don't know $(country)'s language."
   ---
   "$(hello) DataWeave"
}
```

出力:

\[
  "Hola DataWeave",
  "Hello DataWeave",
  "Ola DataWeave"
\]

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

- [DataWeave の型](https://docs.mulesoft.com/jp/dataweave/2.7/dataweave-types)
- [DataWeave セレクター](https://docs.mulesoft.com/jp/dataweave/2.7/dataweave-selectors)