Funções do Lambda para Bicep
Este artigo descreve as funções lambda a serem usadas no Bicep. Expressões lambda (ou funções lambda) são essencialmente blocos de código que podem ser passados como um argumento. Eles podem ter vários parâmetros, mas são restritos a uma única linha de código. No Bicep, a expressão lambda está neste formato:
<lambda variable> => <expression>
Nota
As funções lambda só são suportadas na CLI do Bicep versão 0.10.X ou superior.
Limitações
A função lambda do bíceps tem estas limitações:
- A expressão do Lambda só pode ser especificada diretamente como argumentos de função nessas funções: , , , ,
mapValues()
reduce()
,sort()
, etoObject()
.map()
groupBy()
filter()
- O uso de variáveis lambda (as variáveis temporárias usadas nas expressões lambda) dentro do acesso à matriz de recursos ou módulos não é suportado no momento.
- O uso de variáveis lambda dentro da
listKeys
função não é suportado no momento. - Atualmente, não há suporte para o uso de variáveis lambda dentro da função de referência .
filtrar
filter(inputArray, lambda expression)
Filtra uma matriz com uma função de filtragem personalizada.
Espaço de nome: sys.
Parâmetros
Parâmetro | Necessário | Type | Description |
---|---|---|---|
inputArray | Sim | matriz | A matriz a ser filtrada. |
expressão lambda | Sim | expressão | A expressão lambda é aplicada a cada elemento da matriz de entrada. Se o resultado for verdadeiro, o item será incluído na matriz de saída; caso contrário, o item é descartado. |
Valor devolvido
Uma matriz.
Exemplos
Os exemplos a seguir mostram como usar a filter
função.
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')
As saídas do exemplo anterior:
Nome | Tipo | valor |
---|---|---|
velhosCães | Matriz | [{"nome":"Evie","idade":5,"interesses":["Bola","Frisbee"]},{"nome":"Kira","idade":8,"interesses":["Rubs"]}] |
dogNameIndex | Matriz | [{"nome":"Casper","idade":3,"interesses":["Outros cães"]}] |
oldDogs lista os cães com cinco anos ou mais; dogNameIndex identifica os cães cujo número de índice é inferior a dois e cujo nome começa com a letra "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)
As saídas do exemplo anterior:
Nome | Tipo | valor |
---|---|---|
filteredLoop | Matriz | [6, 7, 8, 9] |
éMesmo | Matriz | [0, 2, 4, 6, 8] |
filterdLoop mostra os números em uma matriz que são maiores que 5; e isEven mostra os números pares na matriz.
groupBy
groupBy(inputArray, lambda expression)
Cria um objeto com valores de matriz de uma matriz, usando uma condição de agrupamento.
Espaço de nome: sys.
Parâmetros
Parâmetro | Necessário | Type | Description |
---|---|---|---|
inputArray | Sim | matriz | A matriz para agrupamento. |
expressão lambda | Sim | expressão | A expressão lambda é aplicada a cada elemento de matriz de entrada e agrupa os elementos usando a condição de agrupamento. |
Valor devolvido
Um objeto.
Exemplos
O exemplo a seguir mostra como usar a groupBy
função.
var inputArray = ['foo', 'bar', 'baz']
output outObject object = groupBy(inputArray, x => substring(x, 0, 1))
A saída do exemplo anterior:
Nome | Tipo | valor |
---|---|---|
outObject | Object | {"f":["foo"],"b":["bar","baz"]} |
outObject mostra um objeto que agrupa os elementos da matriz por suas primeiras letras.
map
map(inputArray, lambda expression)
Aplica uma função de mapeamento personalizada a cada elemento de uma matriz.
Espaço de nome: sys.
Parâmetros
Parâmetro | Necessário | Type | Description |
---|---|---|---|
inputArray | Sim | matriz | A matriz a ser mapeada. |
expressão lambda | Sim | expressão | A expressão lambda aplicada a cada elemento de matriz de entrada, a fim de gerar a matriz de saída. |
Valor devolvido
Uma matriz.
Exemplo
O exemplo a seguir mostra como usar a map
função.
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})
As saídas do exemplo anterior são:
Nome | Tipo | valor |
---|---|---|
dogNomes | Matriz | ["Evie","Casper","Indy","Kira"] |
sayOi | Matriz | ["Olá Evie!","Olá Casper!","Olá Indy!","Olá Kira!"] |
mapArray | Matriz | [{"i":0,"cão":"Evie","saudação":"Ahoy, Evie!"},{"i":1,"cão":"Casper","saudação":"Ahoy, Casper!"},{"i":2,"cão":"Indy","saudação":"Ahoy, Indy!"},{"i":3,"cão":"Kira","saudação":"Ahoy, Kira!"}] |
mapArrayIndex | Matriz | [{"index":0,"val":"Evie"},{"index":1,"val":"Casper"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}] |
dogNames mostra os nomes dos cães a partir da matriz de objetos; sayHi concatena "Olá" e cada um dos nomes dos cães; mapArray e mapArrayIndex criam outras duas matrizes de objetos.
mapValores
mapValues(inputObject, lambda expression)
Cria um objeto a partir de um objeto de entrada, usando uma expressão lambda para mapear valores.
Espaço de nome: sys.
Parâmetros
Parâmetro | Necessário | Type | Description |
---|---|---|---|
inputObject | Sim | objeto | O objeto a ser mapeado. |
expressão lambda | Sim | expressão | A expressão lambda usada para mapear os valores. |
Valor devolvido
Um objeto.
Exemplo
O exemplo a seguir mostra como usar a mapValues
função.
var inputObject = { foo: 'foo', bar: 'bar' }
output mapObject object = mapValues(inputObject, val => toUpper(val))
A saída do exemplo anterior é:
Nome | Tipo | valor |
---|---|---|
mapObject | Object | {foo: 'FOO', bar: 'BAR'} |
mapObject cria outro objeto com os valores em maiúsculas.
reduzir
reduce(inputArray, initialValue, lambda expression)
Reduz uma matriz com uma função de redução personalizada.
Espaço de nome: sys.
Parâmetros
Parâmetro | Necessário | Type | Description |
---|---|---|---|
inputArray | Sim | matriz | A matriz a ser reduzida. |
initialValue | Sim | qualquer | Valor inicial. |
expressão lambda | Sim | expressão | A expressão lambda usada para agregar o valor atual e o próximo valor. |
Valor devolvido
Qualquer.
Exemplo
Os exemplos a seguir mostram como usar a reduce
função.
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)
As saídas do exemplo anterior são:
Nome | Tipo | valor |
---|---|---|
totalIdade | número inteiro | 18 |
totalAgeAdd1 | número inteiro | 19 |
ímparIdade | número inteiro | 7 |
totalAge soma as idades dos cães; totalAgeAdd1 tem um valor inicial de 1 e adiciona todas as idades dos cães aos valores iniciais. oddAge soma as idades dos cães que estão localizados em índices pares, especificamente 5 (Evie) e 2 (Indy).
output reduceObjectUnion object = reduce([
{ foo: 123 }
{ bar: 456 }
{ baz: 789 }
], {}, (cur, next) => union(cur, next))
A saída do exemplo anterior é:
Nome | Tipo | valor |
---|---|---|
reduceObjectUnion | objeto | {"foo":123,"bar":456,"baz":789} |
A função union retorna um único objeto com todos os elementos dos parâmetros. A chamada de função unifica os pares de valor-chave dos objetos em um novo objeto.
sort
sort(inputArray, lambda expression)
Classifica uma matriz com uma função de classificação personalizada.
Espaço de nome: sys.
Parâmetros
Parâmetro | Necessário | Type | Description |
---|---|---|---|
inputArray | Sim | matriz | A matriz a ser classificada. |
expressão lambda | Sim | expressão | A expressão lambda usada para comparar dois elementos de matriz para ordenação. Se true, o segundo elemento será ordenado após o primeiro na matriz de saída. |
Valor devolvido
Uma matriz.
Exemplo
O exemplo a seguir mostra como usar a sort
função.
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)
A saída do exemplo anterior classifica os objetos de cão do mais novo para o mais velho:
Nome | Tipo | valor |
---|---|---|
cãesByAge | Matriz | [{"nome":"Indy","idade":2,"interesses":["Manteiga"]},{"nome":"Casper","idade":3,"interesses":["Outros cães"]},{"nome":"Evie","idade":5,"interesses":["Bola","Frisbee"]},{"nome":"Kira","idade":8,"interesses":["Rubs"]}] |
toObject
toObject(inputArray, lambda expression, [lambda expression])
Converte uma matriz em um objeto com uma função de chave personalizada e uma função de valor personalizado opcional. Consulte os itens sobre como converter um objeto em uma matriz.
Espaço de nome: sys.
Parâmetros
Parâmetro | Necessário | Type | Description |
---|---|---|---|
inputArray | Sim | matriz | A matriz usada para criar um objeto. |
expressão lambda | Sim | expressão | A expressão lambda usada para fornecer o predicado chave. |
expressão lambda | Não | expressão | A expressão lambda usada para fornecer o predicado de valor. |
Valor devolvido
Um objeto.
Exemplo
O exemplo a seguir mostra como usar a toObject
função com os dois parâmetros necessários:
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)
O exemplo anterior gera um objeto baseado em uma matriz.
Nome | Tipo | valor |
---|---|---|
cãesObjeto | Object | {"Evie":{"name":"Evie","age":5,"interest":["Ball","Frisbee"]},"Casper":{"name":"Casper","age":3,"interest":["Other dogs"]},"Indy":{"name":"Indy","age":2,"interest":["Butter"]},"Kira":{"name":"Kira","age":8,"interest":["Rubs"]}} |
A função a seguir toObject
com o terceiro parâmetro fornece a mesma saída.
output dogsObject object = toObject(dogs, entry => entry.name, entry => entry)
O exemplo a seguir mostra como usar a toObject
função com três parâmetros.
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)
O exemplo anterior gera um objeto baseado em uma matriz.
Nome | Tipo | valor |
---|---|---|
cãesObjeto | Object | {"Evie":{"age":5,"interesses":["Bola","Frisbee"]},"Casper":{"age":3,"interesses":["Outros cães"]},"Indy":{"age":2,"interesses":["Butter"]},"Kira":{"age":8,"interesses":["Rubs"]}} |
Próximos passos
- Consulte Funções do Bicep - matrizes para obter mais funções do Bicep relacionadas à matriz.