Bicep のラムダ関数
この記事では、Bicep で使用するラムダ関数について説明します。 ラムダ式 (またはラムダ関数) は、基本的に、引数として渡すことができるコードのブロックです。 これは、複数のパラメーターを取ることができますが、1 行のコードに限定されます。 Bicep では、ラムダ式は次の形式になります。
<lambda variable> => <expression>
Note
ラムダ関数は、Bicep CLI バージョン 0.10.X 以上でのみサポートされています。
制限事項
Bicep のラムダ関数には、次の制限があります。
- ラムダ式は、次の関数の関数引数としてのみ直接指定できます。
filter()
groupBy()
map()
mapValues()
reduce()
sort()
toObject()
- リソース内またはモジュール配列アクセスでのラムダ変数 (ラムダ式で使用される一時的な変数) の使用は、現在サポートされていません。
listKeys
関数内でのラムダ変数の使用は現在サポートされていません。- reference 関数内でのラムダ変数の使用は現在サポートされていません。
filter
filter(inputArray, lambda expression)
カスタム フィルター関数を使用して配列をフィルター処理します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
inputArray | はい | array | フィルター処理する配列。 |
ラムダ式 | はい | expression | ラムダ式は各入力配列要素に適用されます。 結果が true の場合、項目は出力配列に含まれます。それ以外の場合、項目は破棄されます。 |
戻り値
配列。
例
次の例は、filter
関数を使用する方法を示しています。
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Cira'
age: 8
interests: ['Rubs']
}
]
output oldDogs array = filter(dogs, dog => dog.age >=5)
output dogNameIndex array = filter(dogs, (val, i) => i < 2 && substring(val.name, 0, 1) == 'C')
前の例の出力は次のとおりです。
名前 | Type | 値 |
---|---|---|
oldDogs | Array | [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Ira","age":8,"interests":["Rubs"]}] |
dogNameIndex | Array | [{"name":"Casper","age":3,"interests":["Other dogs"]}] |
oldDogsは 5歳以上の犬を一覧表示します。 dogNameIndex は、 インデックス番号が 2 未満で、名前が文字 "C" で始まる犬を識別します。
var itemForLoop = [for item in range(0, 10): item]
output filteredLoop array = filter(itemForLoop, i => i > 5)
output isEven array = filter(range(0, 10), i => 0 == i % 2)
前の例の出力は次のとおりです。
名前 | Type | 値 |
---|---|---|
filteredLoop | Array | [6, 7, 8, 9] |
isEven | Array | [0, 2, 4, 6, 8] |
filterdLoop は、5 より大きい配列の数値を示します。isEven は配列内の偶数を示します。
groupBy
groupBy(inputArray, lambda expression)
グループ化条件を使用して、配列から配列値を持つオブジェクトを作成します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
inputArray | はい | 配列 | グループ化する配列。 |
ラムダ式 | はい | 式 (expression) | ラムダ式は、各入力配列要素に適用され、グループ化条件を使用して要素をグループ化します。 |
戻り値
オブジェクト。
例
次の例は、groupBy
関数の使用法を示しています。
var inputArray = ['foo', 'bar', 'baz']
output outObject object = groupBy(inputArray, x => substring(x, 0, 1))
前の例からの出力は次のようになります。
名前 | Type | Value |
---|---|---|
outObject | Object | {"f":["foo"],"b":["bar","baz"]} |
outObject は、配列要素を最初の文字でグループ化するオブジェクトを示します。
map
map(inputArray, lambda expression)
配列の各要素にカスタム マッピング関数を適用します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
inputArray | はい | array | マップする配列。 |
ラムダ式 | はい | expression | 出力配列を生成するために、各入力配列要素に適用されるラムダ式。 |
戻り値
配列。
例
次の例は、map
関数の使用法を示しています。
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Kira'
age: 8
interests: ['Rubs']
}
]
output dogNames array = map(dogs, dog => dog.name)
output sayHi array = map(dogs, dog => 'Hello ${dog.name}!')
output mapArray array = map(range(0, length(dogs)), i => {
i: i
dog: dogs[i].name
greeting: 'Ahoy, ${dogs[i].name}!'
})
output mapArrayIndex array = map(dogs, (x, i) => { index: i, val: x.name})
前の例の出力は次のとおりです。
名前 | Type | 値 |
---|---|---|
dogNames | Array | ["Evie","Casper","Indy","Kira"] |
sayHi | Array | ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"] |
mapArray | Array | [{"i":0,"dog":"Evie","greeting":"Ahoy, Evie!"},{"i":1,"dog":"Casper","greeting":"Ahoy, Casper!"},{"i":2,"dog":"Indy","greeting":"Ahoy, Indy!"},{"i":3,"dog":"Kira","greeting":"Ahoy, Kira!"}] |
mapArrayIndex | Array | [{"index":0,"val":"Evie"},{"index":1,"val":"Casper"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}] |
dogNames は、 オブジェクトの配列からの犬の名前を示します。 sayHi は "Hello" と各犬の名前を連結します。 mapArray と mapArrayIndex は 、オブジェクトの別の 2 つの配列を作成します。
mapValues
mapValues(inputObject, lambda expression)
ラムダ式を使用して値をマップし、入力オブジェクトからオブジェクトを作成します。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
inputObject | はい | オブジェクト | マップするオブジェクト。 |
ラムダ式 | はい | 式 (expression) | 値のマップに使用されるラムダ式。 |
戻り値
オブジェクト。
例
次の例は、mapValues
関数の使用法を示しています。
var inputObject = { foo: 'foo', bar: 'bar' }
output mapObject object = mapValues(inputObject, val => toUpper(val))
前の例からの出力は次のようになります。
名前 | Type | Value |
---|---|---|
mapObject | Object | {foo: 'FOO', bar: 'BAR'} |
mapObject は、大文字の値を持つ別のオブジェクトを作成します。
reduce
reduce(inputArray, initialValue, lambda expression)
カスタムの reduce 関数を使用して配列を減らします。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
inputArray | はい | array | 削減する配列。 |
initialValue | はい | any | 初期値。 |
ラムダ式 | はい | expression | 現在の値と次の値を集計するために使用されるラムダ式。 |
戻り値
任意。
例
次の例は、reduce
関数を使用する方法を示しています。
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Kira'
age: 8
interests: ['Rubs']
}
]
var ages = map(dogs, dog => dog.age)
output totalAge int = reduce(ages, 0, (cur, next) => cur + next)
output totalAgeAdd1 int = reduce(ages, 1, (cur, next) => cur + next)
output oddAge int = reduce(ages, 0, (cur, next, i) => (i % 2 == 0) ? cur + next : cur)
前の例の出力は次のとおりです。
名前 | Type | 値 |
---|---|---|
totalAge | INT | 18 |
totalAgeAdd1 | INT | 19 |
oddAge | int | 7 |
totalAge は犬の年齢を合計します。totalAgeAdd1 の初期値は 1 で、この初期値にすべての犬の年齢が加算されます。 oddAge は、偶数インデックスにある犬の年齢を合計します。具体的には 5 (Evie) と 2 (Indy) です。
output reduceObjectUnion object = reduce([
{ foo: 123 }
{ bar: 456 }
{ baz: 789 }
], {}, (cur, next) => union(cur, next))
前の例からの出力は次のようになります。
名前 | Type | 値 |
---|---|---|
reduceObjectUnion | object | {"foo":123,"bar":456,"baz":789} |
union 関数は、パラメーターからのすべての要素とともに 1 つのオブジェクトを返します。 関数呼び出しは、オブジェクトのキーと値のペアを新しいオブジェクトに結合します。
sort
sort(inputArray, lambda expression)
カスタムの sort 関数を使用して配列を並べ替えます。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
inputArray | はい | array | 並べ替える配列。 |
ラムダ式 | はい | expression | 順序付けのため、2 つの配列要素を比較するために使用されるラムダ式。 true の場合、2 番目の要素が、出力配列の最初の要素の後に置かれます。 |
戻り値
配列。
例
次の例は、sort
関数の使用法を示しています。
var dogs = [
{
name: 'Evie'
age: 5
interests: ['Ball', 'Frisbee']
}
{
name: 'Casper'
age: 3
interests: ['Other dogs']
}
{
name: 'Indy'
age: 2
interests: ['Butter']
}
{
name: 'Kira'
age: 8
interests: ['Rubs']
}
]
output dogsByAge array = sort(dogs, (a, b) => a.age < b.age)
前の例の出力では、dog オブジェクトが若いものから順に並べ替えられています。
名前 | Type | 値 |
---|---|---|
dogsByAge | Array | [{"name":"Indy","age":2,"interests":["Butter"]},{"name":"Casper","age":3,"interests":["Other dogs"]},{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}] |
toObject
toObject(inputArray, lambda expression, [lambda expression])
カスタム キー関数と省略可能なカスタム値関数を使用して、配列をオブジェクトに変換します。 オブジェクトから配列への変換については、「items」を参照してください。
名前空間: sys。
パラメーター
パラメーター | 必須 | タイプ | 説明 |
---|---|---|---|
inputArray | はい | array | オブジェクトの作成に使用される配列。 |
ラムダ式 | はい | expression | キー述語を提供するために使用されるラムダ式。 |
ラムダ式 | いいえ | expression | 値述語を提供するために使用されるラムダ式。 |
戻り値
オブジェクト。
例
次の例は、2 つの必須パラメーターをもつ toObject
関数を使用する方法を示しています。
var dogs = [
{
name: 'Evie'
age: 5
interests: [ 'Ball', 'Frisbee' ]
}
{
name: 'Casper'
age: 3
interests: [ 'Other dogs' ]
}
{
name: 'Indy'
age: 2
interests: [ 'Butter' ]
}
{
name: 'Kira'
age: 8
interests: [ 'Rubs' ]
}
]
output dogsObject object = toObject(dogs, entry => entry.name)
前の例では、配列に基づいて オブジェクトを生成します。
名前 | Type | 値 |
---|---|---|
dogsObject | Object | {"Evie":{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},"Casper":{"name":"Casper","age":3,"interests":["Other dogs"]},"Indy":{"name":"Indy","age":2,"interests":["Butter"]},"Kira":{"name":"Kira","age":8,"interests":["Rubs"]}} |
3 番目のパラメーターをもつ次の toObject
関数は、同じ出力を提供します。
output dogsObject object = toObject(dogs, entry => entry.name, entry => entry)
次の例は、3 つのパラメーターをもつ toObject
関数を使用する方法を示しています。
var dogs = [
{
name: 'Evie'
properties: {
age: 5
interests: [ 'Ball', 'Frisbee' ]
}
}
{
name: 'Casper'
properties: {
age: 3
interests: [ 'Other dogs' ]
}
}
{
name: 'Indy'
properties: {
age: 2
interests: [ 'Butter' ]
}
}
{
name: 'Kira'
properties: {
age: 8
interests: [ 'Rubs' ]
}
}
]
output dogsObject object = toObject(dogs, entry => entry.name, entry => entry.properties)
前の例では、配列に基づいて オブジェクトを生成します。
名前 | Type | 値 |
---|---|---|
dogsObject | Object | {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}} |
次のステップ
- その他の配列関連の Bicep 関数については、「 Bicep 関数 - 配列 」を参照してください。