データバインディングの構文(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}
文字列リテラル
文字列は一重または二重の引用符を使用して定義します。開始と終了の引用符はセットで使用する必要があります。引用符、キャリッジリターン、改行はエスケープ処理で表現できます。
${"Double-quoted string"}
${'Single-quoted string'}
${"Inner quote: \" or '"}
式は文字列の中に入れ子にすることもできます。
${"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" | |
"50vw" | true | 50 | "50vw" | |
配列 | [] | true | 0 | "" |
マップ | {} | true | 0 | "" |
0vh | false | 0 | "0ch" | |
23% | true | 0.23 | "23%" | |
0% | false | 0 | "0%" | |
auto | true | 0 | "auto" | |
その他 | … | 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} |
'' |
数学関数はレンダリングされません。 |
非整数の具体的な形式は定義されていませんが、sprintf(buf, "%f", value)
のC++規格に従ってください。この形式は、ロケールに応じて変わる可能性があります。
演算子
算術演算子
加算、減算、乗算、除算、剰余の標準的な算術演算子がサポートされています。
${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} // true
${true && false} // false
${!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'} // 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」
最終更新日: 2021 年 10 月 11 日