다음을 통해 공유


Bicep에 대한 람다 함수

이 문서에서는 Bicep에서 사용할 람다 함수에 대해 설명합니다. 람다 식(또는 람다 함수)은 기본적으로 인수로 전달될 수 있는 코드 블록입니다. 여러 매개 변수를 사용할 수 있지만 한 줄의 코드로 제한됩니다. Bicep에서 람다 식은 다음과 같은 형식을 갖습니다.

<lambda variable> => <expression>

참고 항목

람다 함수는 Bicep CLI 버전 0.10.X 이상에서만 지원됩니다.

제한 사항

Bicep 람다 함수에는 다음과 같은 제한 사항이 있습니다.

  • 람다 식은 이러한 함수에서 함수 인수로 직접만 지정할 수 있습니다. filter()groupBy()map()mapValues()reduce()sort()toObject()
  • 리소스 또는 모듈 배열 액세스 내에서 람다 변수(람다 식에 사용되는 임시 변수)를 사용하는 것은 현재 지원되지 않습니다.
  • listKeys 함수 내에서 람다 변수를 사용하는 것은 현재 지원되지 않습니다.
  • reference 함수 내에서 람다 변수를 사용하는 것은 현재 지원되지 않습니다.

필터링

filter(inputArray, lambda expression)

사용자 지정 filtering 함수를 사용하여 배열을 필터링합니다.

네임스페이스: sys.

매개 변수

매개 변수 필수 Type 설명
inputArray 배열 필터링할 배열입니다.
람다 식 각 입력 배열 요소에 적용된 람다 식입니다. 결과가 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')

이전 예제의 출력은 다음과 같습니다.

속성 타입
oldDogs 배열 [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}]
dogNameIndex 배열 [{"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)

이전 예제의 출력은 다음과 같습니다.

속성 타입
filteredLoop 배열 [6, 7, 8, 9]
isEven 배열 [0, 2, 4, 6, 8]

filterdLoop는 배열에서 5보다 큰 숫자를 표시하고, isEven은 배열의 짝수 숫자를 표시합니다.

groupBy

groupBy(inputArray, lambda expression)

그룹화 조건을 사용하여 배열에서 배열 값이 있는 개체를 만듭니다.

네임스페이스: sys.

매개 변수

매개 변수 필수 Type 설명
inputArray array 그룹화할 배열입니다.
람다 식 람다 식은 각 입력 배열 요소에 적용되며 그룹화 조건을 사용하여 요소를 그룹화합니다.

반환 값

개체입니다.

예제

다음 예제에서는 groupBy 함수를 사용하는 방법을 보여 줍니다.

var inputArray = ['foo', 'bar', 'baz']

output outObject object = groupBy(inputArray, x => substring(x, 0, 1)) 

위 예제의 출력은 다음과 같습니다.

이름 타입
outObject Object {"f":["foo"],"b":["bar","baz"]}

outObject는 배열 요소를 첫 글자로 그룹화한 개체를 표시합니다.

map

map(inputArray, lambda expression)

배열의 각 요소에 사용자 지정 매핑 함수를 적용합니다.

네임스페이스: sys.

매개 변수

매개 변수 필수 Type 설명
inputArray 배열 매핑할 배열입니다.
람다 식 출력 배열을 생성하기 위해 각 입력 배열 요소에 적용된 람다 식입니다.

반환 값

배열입니다.

예시

다음 예제에서는 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})

이전 예제의 출력은 다음과 같습니다.

속성 타입
dogNames 배열 ["Evie","Casper","Indy","Kira"]
sayHi 배열 ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"]
mapArray 배열 [{"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 배열 [{"index":0,"val":"Evie"},{"index":1,"val":"Casper"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}]

dogNames는 개체 배열의 개 이름을 표시합니다. sayHi 는 "Hello"와 각 개 이름을 연결합니다. mapArraymapArrayIndex 는 개체의 또 다른 두 배열을 만듭니다.

mapValues

mapValues(inputObject, lambda expression)

람다 식을 사용하여 값을 매핑하여 입력 개체에서 개체를 만듭니다.

네임스페이스: sys.

매개 변수

매개 변수 필수 Type 설명
inputObject 개체 매핑할 개체입니다.
람다 식 값을 매핑하는 데 사용되는 람다 식입니다.

반환 값

개체입니다.

예시

다음 예제에서는 mapValues 함수를 사용하는 방법을 보여 줍니다.

var inputObject = { foo: 'foo', bar: 'bar' }

output mapObject object = mapValues(inputObject, val => toUpper(val)) 

위 예제의 출력은 다음과 같습니다.

이름 타입
mapObject Object {foo: 'FOO', bar: 'BAR'}

mapObject는 대문자로 값을 가진 다른 개체를 만듭니다.

reduce

reduce(inputArray, initialValue, lambda expression)

사용자 지정 reduce 함수를 사용하여 배열을 줄입니다.

네임스페이스: sys.

매개 변수

매개 변수 필수 Type 설명
inputArray 배열 줄일 배열입니다.
initialValue any 초기 값입니다.
람다 식 현재 값과 다음 값을 집계하는 데 사용되는 람다 식입니다.

반환 값

임의 값

예시

다음 예제에서는 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)

이전 예제의 출력은 다음과 같습니다.

속성 타입
totalAge int 18
totalAgeAdd1 int 19
oddAge int 7

totalAge는 강아지 나이를 합산합니다. totalAgeAdd1의 초기 값은 1이며 모든 강아지 나이에 초기 값에 추가합니다. oddAge는 특히 5 (에비)와 2 (Indy)의 인덱스에 있는 강아지의 나이를 합산합니다.

output reduceObjectUnion object = reduce([
  { foo: 123 }
  { bar: 456 }
  { baz: 789 }
], {}, (cur, next) => union(cur, next))

위 예제의 출력은 다음과 같습니다.

이름 타입
reduceObjectUnion 개체 {"foo":123,"bar":456,"baz":789}

union 함수는 매개 변수의 모든 요소가 포함된 단일 개체를 반환합니다. 이 함수 호출은 개체의 키-값 쌍을 새 개체로 통합합니다.

sort

sort(inputArray, lambda expression)

사용자 지정 sort 함수를 사용하여 배열을 정렬합니다.

네임스페이스: sys.

매개 변수

매개 변수 필수 Type 설명
inputArray 배열 정렬할 배열입니다.
람다 식 순서 지정을 위해 두 배열 요소를 비교하는 데 사용되는 람다 식입니다. true이면 두 번째 요소가 출력 배열에서 첫 번째 요소 다음에 옵니다.

반환 값

배열입니다.

예시

다음 예제에서는 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)

이전 예제의 출력은 강아지 개체를 나이가 가장 적은 것부터 많은 것까지 정렬합니다.

이름 타입
dogsByAge 배열 [{"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])

사용자 지정 키 함수 및 선택적 사용자 지정 값 함수를 사용하여 배열을 개체로 변환합니다. 개체를 배열로 변환하는 방법에 대한 항목을 참조하세요.

네임스페이스: sys.

매개 변수

매개 변수 필수 Type 설명
inputArray 배열 개체를 만드는 데 사용되는 배열입니다.
람다 식 키 조건자를 제공하는 데 사용되는 람다 식입니다.
람다 식 아니요 값 조건자를 제공하는 데 사용되는 람다 식입니다.

반환 값

개체입니다.

예시

다음 예제에서는 두 개의 필수 매개 변수와 함께 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)

앞의 예제에서는 배열을 기반으로 개체를 생성합니다.

이름 타입
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"]}}

세 번째 매개 변수가 있는 다음 toObject 함수는 동일한 출력을 제공합니다.

output dogsObject object = toObject(dogs, entry => entry.name, entry => entry)

다음 예제에서는 세 개의 매개 변수와 함께 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)

앞의 예제에서는 배열을 기반으로 개체를 생성합니다.

이름 타입
dogsObject Object {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}}

다음 단계