データバインディングの構文(APL for Audio)


データバインディングの構文(APL for Audio)

ドキュメントをレンダリングするときにAlexaによって評価される式を記述するには、データバインディング構文を使用します。データバインディング式を使用すると、コンポーネントプロパティをデータソースにバインドしたり、条件に応じてコンポーネントを包含または除外する条件付きロジックを記述したりできます。

データバインディング式について

データバインディング式は、JSON文字列内で使用します。データバインディング式の形式は「${expression}」です。

"${2}+${2} = ${2+2}"のように、任意の数の式を文字列内に記述できます。

Alexaは、式を現在のデータバインディングコンテキスト内で評価します。データバインディングコンテキストはブール値、数値、文字列、配列、オブジェクト、null値をサポートするグローバルディクショナリーです。

サポートされる値のタイプ

識別子

識別子は、データバインディング変数を識別するために使用される名前です。識別子は、C識別子の命名規則である[a-zA-Z_][a-zA-Z0-9_]*に従う必要があります。つまり、識別子は大文字または小文字のASCII文字かアンダースコアで始まり、その後に0文字以上のASCII文字、数字、アンダースコアを続けます。

${data}
${_myWord23}
${__AnUgly26_letter__examplE}

文字列リテラル

文字列は一重または二重の引用符を使用して定義します。開始と終了の引用符はセットで使用する必要があります。引用符、キャリッジリターン、改行はエスケープ処理で表現できます。

${"二重引用符で囲まれた文字列"}
${'一重引用符で囲まれた文字列'}
${"内部の引用符:\"または'"}

式は文字列の中に入れ子にすることもできます。

${"2たす2は${2+2}"}

数値

正の数、負の数、浮動小数点数がサポートされます。指数表記には対応していません。すべての数値は倍精度型です。

ブール値

trueとfalseのブール値がサポートされます。

${true}
${false}

時間

時間のデータ型がサポートされます。デフォルトの単位はミリ秒です。サポートされている単位は、ミリ秒と秒のみです。「秒」の単位は、接尾辞「s」を使って表します。

${1000}
${1.7s}

null

null定数がサポートされます。

${null}

truthyと強制

データバインディング式では、さまざまな型が使用されます。これらの型はほかの型に変換できます。以下の表は、これらの型の変換をまとめたものです。

オブジェクトの型 ブール値 数値 文字列

Null

null

false

0

""

ブール値

true

true

1

"true"

false

false

0

"false"

数値

23

true

23

"23"

0

false

0

"0"

文字列

"私の犬"

true

0

"私の犬"

""

false

0

""

"-2.3"

true

-2.3

"-2.3"

"red"

true

0

"red"

配列

[]

true

0

""

マップ

{}

true

0

""

時間

1000

true

1000

1000

0

false

0

"0"

1.7s

true

1700

"1.7s"

1.7l

false

0

""

0s

false

0

"0s"

その他

true

0

""

ブール値の強制

truthy値とは、真偽を判定するコンテキストで評価したときにtrueと見なされる値です。false、0、""、null値を除くすべての値はtrueと見なされます。

数値の強制

ブール型の「true」値は数値の1に変換されます。それ以外の場合はすべて0に変換されます。

文字列の強制

内部の型は、次の表に示すルールに従って文字列に変換されます。

オブジェクト 結果 説明
Null null '' null値はレンダリングされません。
ブール値 true false 'true' 'false' ブール値のtrueとfalseは文字列としてレンダリングされます。
数値 -23 '-23' 整数では、小数点以下の桁は表示されません。
  1/3 '0.333333' 非整数では、小数点以下の桁が表示されます。
文字列 "My "dog" " 'My "dog" ' 文字列値です。
配列 […] '' 配列はレンダリングされません。
マップ {…} '' マップはレンダリングされません。
その他 ${Math.min} '' 数学関数はレンダリングされません。

整数以外の数値に対する固有の形式は定義されていませんが、C++標準のsprintf(buf, "%f", value)に従います。この形式は、ロケールに応じて変わる可能性があります。

演算子

算術演算子

加算、減算、乗算、除算、剰余の標準的な算術演算子がサポートされています。

${1+2} // 3
${1-2} // -1
${1*2} // 2
${1/2} // 0.5
${1%2} // 1.

加算と減算は、数値のペアに対して機能します。

加算演算子は、左オペランドか右オペランドが文字列の場合、文字列を連結する演算子としても使用できます。

${27+""}     // '27'
${1+" dog"}  // '1 dog'
${"have "+3} // 'have 3'

乗算演算子、除算演算子、剰余演算子は、数値のペアに対して機能します。

剰余演算子は、JavaScriptの場合と同じように機能します。

${10 % 3}  // 1
${-1 % 2}  // -1
${3 % -6}  // 3
${6.5 % 2} // 0.5

論理演算子

標準的なAND、OR、NOTの論理演算子がサポートされています。

${true && false} // false
${true || false} // true
${!true}         // false

&&演算子は、第1オペランドがfalseと見なされる場合は第1オペランドを返し、そうでない場合は第2オペランドを返します。||演算子は、第1オペランドがtrueと見なされる場合は第1オペランドを返し、そうでない場合は第2オペランドを返します。

${7 && 2}    // 2
${null && 3} // null
${7 || 2}    // 7
${0 || -16}  // -16

比較演算子

比較演算子は、ブール値を返します。

${1 < 2}
${75 <= 100}
${3 > -1}
${4 >= 4}
${myNullValue == null}
${(2>1) == true}
${1 != 2}

比較演算子は、配列やオブジェクトには適用されません。

Null合体演算子

??演算子は、null合体演算子です。左オペランドがnullでない場合はそのオペランドを返し、それ以外の場合は右オペランドを返します。null合体演算子は連鎖させることができます。

${person.name ?? person.surname ?? 'Hey, you!'}

null合体演算子は、左オペランドがnull以外であればそのオペランドを返します。

${1==2 ?? 'Dog'}   // returns false
${1==2 || 'Dog'}   // 「Dog」が返される

三項演算子

三項条件演算子(${a ? b : c})は、左オペランドを評価します。trueまたはtruthy値に評価された場合は、中央のオペランドを返します。そうでない場合は、右オペランドを返します。

${person.rank > 8 ? 'General' : 'Private'}

配列とオブジェクトへのアクセス

配列

配列へのアクセスには[]演算子を使用します。この場合、オペランドは整数でなければなりません。配列は、配列の長さを返す.length演算子もサポートしています。配列の範囲外の要素にアクセスすると、nullが返されます。

${myArray[4]}     // 配列の5番目の要素(0から始まるインデックス)
${myArray.length} // 配列の長さ
${myArray[-1])}   // 配列の最後の要素
${myArray[myArray.length]}  // nullが返される(範囲外)

負のインデックスを渡すと、配列を後ろから数えます。

${a[-1] == a[a.length - 1]} // true

オブジェクト

オブジェクトでは、.(ドット)演算子と[]配列アクセス演算子での文字列値の使用がサポートされます。

${myObject.name}    // myObjectの「name」プロパティ
${myObject['name']} // myObjectの「name」プロパティ

未定義のプロパティはnullを返します。nullに対して.(ドット)演算子または[]演算子を呼び出すと、nullが返されます。

${myNullObject.address.zipcode} // nullが返される

ドット演算子の右オペランドは、有効な識別子でなければなりません。

関数の呼び出し

関数

データバインディングでは、一部のビルトイン関数がサポートされています。関数の形式は次のとおりです。

functionName( arg1, arg2, … )

関数の引数は必須ではありません。関数は単一の値を返します。

ビルトイン関数

プロパティ 説明
Math.abs(x) xの絶対値を返します。 ${Math.abs(-2.3)} == 2.3
Math.acos(x) xのアークコサインを返します。 ${Math.acos(1)} == 0
Math.asin(x) xのアークサインを返します。 ${Math.asin(0)} == 0
Math.atan(x) xのアークタンジェントを返します。 ${Math.atan(1)} == 0.7853981633974483
Math.ceil(x) x以上の最小の整数を返します。 ${Math.ceil(2.3)} == 3
Math.clamp(x,y,z) y<xの場合はx、y>zの場合はz、それ以外の場合はyを返します。 ${Math.clamp(1, 22.3,10)} == 10
Math.cos(x) xのコサインを返します。 ${Math.cos(0)} == 1
Math.floor(x) x以下の最大の整数を返します。 ${Math.floor(2.3)} = 2
Math.max(x1,x2,…) 最大の引数を返します。 ${Math.max(2,3)} == 3
Math.min(x1,x2,…) 最小の引数を返します。 ${Math.min(2,3)} == 2
Math.PI π(円周率)の値です。 3.141592653589793
Math.random() 0と1の間の乱数を返します。 ${Math.random()} == 0.7113654073137101(常に同じとは限りません)
Math.round(x) xに最も近い整数を返します。 ${Math.round(2.3)} == 2
Math.sign(x) xの符号を返します。-1、0、+1のいずれかになります。 ${Math.sign(-43.1) == -1
Math.sin(x) xのサインを返します。 ${Math.sin(Math.PI/6)} == 0.5
Math.sqrt(x) xの平方根を返します。 ${Math.sqrt(9)} == 3
Math.tan(x) xのタンジェントを返します。 ${Math.tan(Math.PI/4)} == 0.5
String.slice(x,y[,z]) インデックスyから開始して、インデックスzの前までのxのサブセットを返します。zを省略すると、残りの文字列が返されます。yが負の数の場合、文字列の末尾から選択します。 ${String.slice("berry", 2, 4)} == "rr" ${String.slice("berry", -2)} == "ry"
String.toLowerCase(x) 小文字に変換されたxが返されます。 ${String.toLowerCase("bEn")} == "ben"
String.toUpperCase(x) 大文字に変換されたxが返されます。 ${String.toUpperCase("bEn")} == "BEN"

データバインディングの文字列の変換

APLはJSONでシリアル化されているため、すべてのデータバインド式はJSON文字列内で定義されます。

{
  "MY_EXPRESSION": "${....}"
}

引用符とデータバインディング式の間にスペースがない場合、式の結果はデータバインディング評価の結果になります。次に例を示します。

"${true}"               -> ブール値のtrue
"${2+4}"                -> 数値6
"${0 <= 1 && 'three'}"  -> 文字列「three」

文字列内のデータバインディング式の外側にスペースがある場合、または2つのデータバインディング式が並んでいる場合、結果は連結された文字列になります。

" ${true}"     -> 文字列「 true」
"${2+4} "      -> 文字列「6 」
"${2+1}${1+2}" -> 文字列「33」


このページは役に立ちましたか?

最終更新日: 2025 年 11 月 26 日