Funções 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 usar 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>

Observação

As funções lambda só têm suporte na CLI do Bicep versão 0.10.X ou superior.

Limitações

A função lambda do Bicep tem estas limitações:

  • A expressão lambda só pode ser especificada diretamente como argumentos de função nessas funções: filter(), map(), reduce(), sort() e toObject().
  • No momento, não há suporte para o uso de variáveis lambda (as variáveis temporárias usadas nas expressões lambda) no acesso à matriz de recursos ou módulos.
  • No momento, não há suporte para o uso de variáveis lambda dentro da função listKeys.
  • Não há suporte para o uso de variáveis lambda dentro da função de referência no momento.

filter

filter(inputArray, lambda expression)

Filtra uma matriz com uma função de filtragem personalizada.

Namespace: sys.

Parâmetros

Parâmetro Obrigatório Type Descrição
inputArray Sim matriz A matriz a filtrar.
expressão lambda Sim expressão A expressão lambda é aplicada a cada elemento de matriz de entrada. Se o resultado for true, o item será incluído na matriz de saída; caso contrário, o item será descartado.

Retornar valor

Uma matriz .

Exemplos

Os exemplos a seguir mostram como usar a função 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)

A saída do exemplo anterior mostra os cachorros com cinco anos ou mais:

Nome Tipo Valor
oldDogs Array [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","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)

A saída do exemplo anterior é:

Nome Tipo Valor
filteredLoop Array [6, 7, 8, 9]
isEven Array [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.

mapa

map(inputArray, lambda expression)

Aplica uma função de mapeamento personalizada a cada elemento de uma matriz.

Namespace: sys.

Parâmetros

Parâmetro Obrigatório Type Descrição
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.

Retornar valor

Uma matriz .

Exemplo

O exemplo a seguir mostra como usar a função 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}!'
})

O resultado do exemplo anterior é:

Nome Tipo Valor
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 mostra os nomes dos cachorros da matriz de objetos; sayHi concatena "Hello" e cada um dos nomes de cachorros e mapObject cria outra matriz de objetos.

reduce

reduce(inputArray, initialValue, lambda expression)

Reduz uma matriz com uma função de redução personalizada.

Namespace: sys.

Parâmetros

Parâmetro Obrigatório Type Descrição
inputArray Sim matriz A matriz a ser reduzida.
initialValue Sim any Valor inicial.
expressão lambda Sim expressão A expressão lambda usada para agregar o valor atual e o próximo valor.

Retornar valor

Qualquer um.

Exemplo

Os exemplos a seguir mostram como usar a função 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)

O resultado do exemplo anterior é:

Nome Tipo Valor
totalAge INT 18
totalAgeAdd1 INT 19

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.

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

O resultado do exemplo anterior é:

Nome Tipo Valor
reduceObjectUnion objeto {"foo":123,"bar":456,"baz":789}

A função união retorna um único objeto com todos os elementos dos parâmetros. A chamada de função sindicaliza os pares de valor de chave dos objetos em um novo objeto.

sort

sort(inputArray, lambda expression)

Classifica uma matriz com uma função de classificação personalizada.

Namespace: sys.

Parâmetros

Parâmetro Obrigatório Type Descrição
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 for true, o segundo elemento será ordenado após o primeiro na matriz de saída.

Retornar valor

Uma matriz .

Exemplo

O exemplo a seguir mostra como usar a função 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)

A saída do exemplo anterior classifica os objetos de cachorro dos mais jovens para os mais antigos:

Nome Tipo Valor
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])

Converte uma matriz em um objeto com uma função de chave personalizada e uma função de valor personalizado opcional. Confira os itens sobre a conversão de um objeto em uma matriz.

Namespace: sys.

Parâmetros

Parâmetro Obrigatório Type Descrição
inputArray Sim matriz A matriz usada para criar um objeto.
expressão lambda Sim expressão A expressão lambda utilizada para fornecer o predicado da chave.
expressão lambda Não expressão A expressão lambda utilizada para fornecer o predicado do valor.

Retornar valor

Um objeto.

Exemplo

O exemplo a seguir mostra como usar a função toObject com os dois parâmetros obrigató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 com base numa matriz.

Nome Tipo Valor
dogsObject Objeto {"Evie":{"nome":"Evie","idade":5,"interesses":["Bola","Frisbee"]},"Casper":{"nome":"Casper","idade":3,"interesses":["Outros cães"]},"Indy":{"nome":"Indy","idade":2,"interesses":["Borboleta"]},"Kira":{"nome":"Kira","idade":8,"interesses":["Borrachas"]}}

A seguinte função 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 função toObject 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 com base numa matriz.

Nome Tipo Valor
dogsObject Objeto {"Evie":{"idade":5,"interesses":["Bola","Frisbee"]},"Casper":{"idade":3,"interesses":["Outros cães"]},"Indy":{"idade":2,"interesses":["Borboleta"]},"Kira":{"idade":8,"interesses":["Borrachas"]}}

Próximas etapas