Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerDataWeave スクリプトのヘッダー内で fun
宣言を使用して、独自の DataWeave 関数を定義できます。
開始する前に、Mule 4 アプリケーションでは DataWeave のバージョン 2.x が使用されることに注意してください。Mule 3 アプリケーションでの DataWeave については、DataWeave バージョン 1.2 のドキュメントを参照してください。
他の Mule バージョンの場合は、DataWeave の目次のバージョンセレクターを使用できます。
DataWeave で関数を定義するには、次の構文を使用します。
fun myFunction(param1, param2, ...) = <code to execute>
fun
キーワードは関数の定義を開始します。
myFunction
は、関数に対して定義する名前です。
関数名は有効な識別子である必要があります。有効な識別子についての詳細は、「有効な識別子を宣言するためのルール」を参照してください。
(param1, param2, … , paramn)
は、関数で受け入れるパラメーターを表します。
ゼロ個から任意の数までのパラメーターをカンマ (,
) で区切り、括弧で囲んで指定できます。
=
記号は、関数がコールされたときに実行するコードブロックの先頭をマークします。
<code to execute>
は、関数で定義する実際のコードを表します。
次の例では、1 つの文字列引数を受け入れて、受け取った文字列引数を使用して upper
関数をコールし、結果を出力する DataWeave 関数を定義します。
%dw 2.0
output application/json
fun toUpper(aString) = upper(aString)
---
toUpper("hello")
"HELLO"
次の例は、DataWeave 関数の引数で任意の DataWeave 式を使用する方法を示しています。
%dw 2.0
output application/json
fun toUpper(aString) = upper(aString)
---
toUpper("h" ++ "el" ++ lower("LO") )
"HELLO"
次の例では、組み込みの match
操作を使用してパターン一致を実行し、関数に渡された引数の型をテストします。
%dw 2.0
output application/json
fun toUpper(aString)
= aString match {
case is String -> upper(aString)
else -> null
}
---
toUpper("h" ++ "el" ++ lower("LO") )
"HELLO"
次の例では、数値文字列を共通の電話番号形式に再度書式設定する関数を作成します。
%dw 2.0
output application/json
fun toPhoneFormat(str: String) =
"(" ++ str[0 to 2] ++ ") " ++ str[3 to 5] ++ "-" ++ str[6 to 9]
---
toPhoneFormat("1234567890")
"(123) 456-7890"
関数を宣言するときに型制約の式を定義すると、関数コールの引数に、定義した型制約を確実に適用できます。
関数の型制約を定義するには、次の構文を使用します。
fun myFunction(param1: Type, param2: Type): ResultType = <code to execute>
%dw 2.0 output application/json fun toUser(id: Number, userName: String): String = "you called the function toUser!"
この例の型制約では、関数 toUser
が 1 番目の引数で Number
型のみを受け入れ、2 番目の引数で String
型のみを受け入れることを定義します。
また、この関数では、結果を String
型にする制約も指定されています。この戻り値の型制約は関数コールには影響しません。この制約を関数コードに適用して、関数で定義済みの型が生成されたことを検証します。
DataWeave 型システムについての詳細は、https://docs.mulesoft.com/dataweave/latest/dataweave-type-system を参照してください。
デフォルト値をパラメーターに割り当てることで、省略可能なパラメーターを定義できます。次の例は、必須の 1 つのパラメーター (name
) と、デフォルト値を持つ省略可能な 2 番目のパラメーター (countryCode
) を定義している関数を示しています。
%dw 2.0
output application/json
fun createUserData(name, countryCode = "US") = { "User name" : name, "Location": countryCode}
---
[createUserData("Cristian", "AR"), createUserData("Max The Mule")]
[ { "User name": "Cristian", "Location": "AR" }, { "User name": "Max The Mule", "Location": "US" } ]
DataWeave では、パラメーター定義の先頭または末尾で省略可能なパラメーターを定義できます。
%dw 2.0
output application/json
fun optionalParamsLast(a, b = 2, c = 3)
fun optionalParamsFirst(a = 1, b = 2, c)
関数をコールすると、引数は左から右へ割り当てられます。ただし、省略可能なパラメーターを最初に定義した場合、引数は右から左へ割り当てられます。また、関数のすべてのパラメーターが省略可能な場合も、割り当ては右から左です。
%dw 2.0
output application/json
fun optionalParamsLast(param1, param2 = 2, param3 = 3) =
{ "param1": param1, "param2": param2, "param3": param3}
fun optionalParamsFirst(param1 = 1, param2 = 2, param3) =
{ "param1": param1, "param2": param2, "param3": param3}
fun allParametersOptional(param1 = 1, param2 = 2, param3 = 3) =
{ "param1": param1, "param2": param2, "param3": param3}
---
{
"optionalParamsLast(A)":optionalParamsLast('A'),
"optionalParamsLast(A, B)":optionalParamsLast('A', 'B'),
"optionalParamsLast(A, B, C)":optionalParamsLast('A', 'B', 'C'),
"optionalParamsFirst(A)":optionalParamsFirst('A'),
"optionalParamsFirst(A, B)":optionalParamsFirst('A', 'B'),
"optionalParamsFirst(A, B, C)":optionalParamsFirst('A', 'B', 'C'),
"allParametersOptional(A)":allParametersOptional('A'),
"allParametersOptional(A, B)":allParametersOptional('A', 'B'),
"allParametersOptional(A, B, C)":allParametersOptional('A', 'B', 'C')
}
{ "optionalParamsLast(A)": { "param1": "A", "param2": 2, "param3": 3 }, "optionalParamsLast(A, B)": { "param1": "A", "param2": "B", "param3": 3 }, "optionalParamsLast(A, B, C)": { "param1": "A", "param2": "B", "param3": "C" }, "optionalParamsFirst(A)": { "param1": 1, "param2": 2, "param3": "A" }, "optionalParamsFirst(A, B)": { "param1": 1, "param2": "A", "param3": "B" }, "optionalParamsFirst(A, B, C)": { "param1": "A", "param2": "B", "param3": "C" }, "allParametersOptional(A)": { "param1": 1, "param2": 2, "param3": "A" }, "allParametersOptional(A, B)": { "param1": 1, "param2": "A", "param3": "B" }, "allParametersOptional(A, B, C)": { "param1": "A", "param2": "B", "param3": "C" } }
DataWeave 関数定義では、一部のプログラミング言語の汎用型に似ている型パラメーターの使用がサポートされています。
%dw 2.0
output application/json
fun toArray<T>(x: T): Array<T> = [x]
---
toArray(2)
DataWeave では、関数で受け入れられる入力を制限する型パラメーター制約の追加もサポートされています。
%dw 2.0
output application/json
fun getName<T <: { name: String }>(x: T): String = x.name
---
{
name: getName({ name: "Andrés" })
//name: getName({ age: 20 }) invalid call as the parameter does not fullfill the constraint
}
DataWeave では、同じ名前でパラメーターの異なる複数の関数を作成できます。これは、関数コールの引数に基づいて異なる動作を定義するのに便利です。
オーバーロードされた関数のパラメーターは、数や型が異なります。関数パラメーターの型を定義する際の制約については、「型システム」を参照してください。
DataWeave は、スクリプトで関数が宣言されている順序に従って、関数コールの引数を受け入れる最初の関数を使用します。
%dw 2.0
output application/json
fun toUpper(a: String) = upper(a)
fun toUpper(a: Any) = null
fun toUpper(a: String, b: Number) = upper(a) ++ b as String
---
toUpper("hi!")
関数コール toUpper("hi!")
の引数は、String (文字列) 型と Any (任意) 型に一致するため、最初の 2 つの定義で関数を呼び出すことができます。ただし、Any (任意) 型を使用する関数より先に fun toUpper(a: String) = upper(a)
関数が定義されているため、DataWeave はこの関数を実行します。
"HI!"
null
"AGE: 26"