Share via


Bicep のラムダ関数

この記事では、Bicep で使用するラムダ関数について説明します。 ラムダ式 (またはラムダ関数) は、基本的に、引数として渡すことができるコードのブロックです。 これは、複数のパラメーターを取ることができますが、1 行のコードに限定されます。 Bicep では、ラムダ式は次の形式になります。

<lambda variable> => <expression>

Note

ラムダ関数は、Bicep CLI バージョン 0.10.X 以上でのみサポートされています。

制限事項

Bicep のラムダ関数には、次の制限があります。

  • ラムダ式は、filter()map()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: 'Kira'
    age: 8
    interests: ['Rubs']
  }
]

output oldDogs array = filter(dogs, dog => dog.age >=5)

前の例の出力は、5 才以上の犬を示しています。

名前 Type
oldDogs Array [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Ira","age":8,"interests":["Rubs"]}]
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 は配列内の偶数を示します。

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 mapObject array = map(range(0, length(dogs)), i => {
  i: i
  dog: dogs[i].name
  greeting: 'Ahoy, ${dogs[i].name}!'
})

前の例からの出力は次のようになります。

名前 Type
dogNames Array ["Evie","Casper","Indy","Kira"]
sayHi Array ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"]
mapObject 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!"}]

dogNames はオブジェクトの配列からの犬の名前を示します。sayHi は "Hello" と各犬の名前を連結します。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)

前の例からの出力は次のようになります。

名前 Type
totalAge INT 18
totalAgeAdd1 INT 19

totalAge は犬の年齢を合計します。totalAgeAdd1 の初期値は 1 で、この初期値にすべての犬の年齢が加算されます。

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 関数 - 配列」を参照してください。