Funzioni lambda per Bicep

Questo articolo descrive le funzioni lambda da usare in Bicep. Le espressioni lambda (o funzioni lambda) sono essenzialmente blocchi di codice che possono essere passati come argomento. Possono accettare più parametri, ma sono limitati a una singola riga di codice. In Bicep l'espressione lambda è in questo formato:

<lambda variable> => <expression>

Nota

Le funzioni lambda sono supportate solo nell'interfaccia della riga di comando di Bicep versione 0.10.X o successiva.

Limiti

La funzione lambda Bicep presenta queste limitazioni:

  • L'espressione lambda può essere specificata direttamente come argomenti di funzione nelle funzioni seguenti: filter(), groupBy(), mapValues()map(), reduce(), sort(), e toObject().
  • L'uso di variabili lambda (le variabili temporanee usate nelle espressioni lambda) all'interno dell'accesso alle matrici di risorse o moduli non è attualmente supportato.
  • L'uso di variabili lambda all'interno della funzione listKeys non è attualmente supportato.
  • L'uso di variabili lambda all'interno della funzione di riferimento non è attualmente supportato.

filter

filter(inputArray, lambda expression)

Filtra una matrice con una funzione di filtro personalizzata.

Spazio dei nomi: sys.

Parametri

Parametro Richiesto Type Descrizione
inputArray array Matrice da filtrare.
espressione lambda expression L'espressione lambda viene applicata a ogni elemento della matrice di input. Se il risultato è true, l'elemento viene incluso nella matrice di output; in caso contrario, l'elemento viene rimosso.

Valore restituito

Matrice .

Esempi

Negli esempi seguenti viene illustrato come usare la funzione 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')

Output dell'esempio precedente:

Nome Type Valore
oldDogs Matrice [{"name":"Evie","age":5,"interests":["Ball","Frisbee"]},{"name":"Kira","age":8,"interests":["Rubs"]}]
dogNameIndex Matrice [{"name":"Casper","age":3,"interests":["Altri cani"]}]

oldDogs elenca i cani che sono cinque o più vecchi; dogNameIndex identifica i cani il cui numero di indice è minore di due e il cui nome inizia con la lettera "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)

Output dell'esempio precedente:

Nome Type Valore
filteredLoop Matrice [6, 7, 8, 9]
isEven Matrice [0, 2, 4, 6, 8]

filterdLoop mostra i numeri in una matrice maggiore di 5, e isEven mostra i numeri pari nella matrice.

Groupby

groupBy(inputArray, lambda expression)

Crea un oggetto con valori di matrice da una matrice usando una condizione di raggruppamento.

Spazio dei nomi: sys.

Parametri

Parametro Richiesto Type Descrizione
inputArray array Matrice per il raggruppamento.
espressione lambda expression L'espressione lambda viene applicata a ogni elemento della matrice di input e raggruppa gli elementi usando la condizione di raggruppamento.

Valore restituito

Oggetto .

Esempi

L'esempio seguente illustra come usare la funzione groupBy.

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

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

L'output dell'esempio precedente:

Nome Type Valore
outObject Object {"f":["foo"],"b":["bar","baz"]}

outObject mostra un oggetto che raggruppa gli elementi della matrice in base alle prime lettere.

mappa

map(inputArray, lambda expression)

Applica una funzione di mapping personalizzata a ogni elemento di una matrice.

Spazio dei nomi: sys.

Parametri

Parametro Richiesto Type Descrizione
inputArray array Matrice da mappare.
espressione lambda expression Espressione lambda applicata a ogni elemento della matrice di input, per generare la matrice di output.

Valore restituito

Matrice .

Esempio

L'esempio seguente illustra come usare la funzione 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})

Gli output dell'esempio precedente sono:

Nome Type Valore
dogNames Matrice ["Evie","Casper","Indy","Kira"]
sayHi Matrice ["Hello Evie!","Hello Casper!","Hello Indy!","Hello Kira!"]
mapArray Matrice [{"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 Matrice [{"index":0,"val":"Evie"},{"index":1,"val":"Casper"},{"index":2,"val":"Indy"},{"index":3,"val":"Kira"}]

dogNames mostra i nomi dei cani dalla matrice di oggetti; sayHi concatena "Hello" e ognuno dei nomi dei cani; mapArray e mapArrayIndex creano altre due matrici di oggetti.

mapValues

mapValues(inputObject, lambda expression)

Crea un oggetto da un oggetto di input, utilizzando un'espressione lambda per eseguire il mapping dei valori.

Spazio dei nomi: sys.

Parametri

Parametro Richiesto Type Descrizione
Inputobject oggetto Oggetto da mappare.
espressione lambda expression Espressione lambda utilizzata per eseguire il mapping dei valori.

Valore restituito

Oggetto .

Esempio

L'esempio seguente illustra come usare la funzione mapValues.

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

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

L'output dell'esempio precedente è:

Nome Type Valore
mapObject Object {foo: 'FOO', bar: 'BAR'}

mapObject crea un altro oggetto con i valori in lettere maiuscole.

reduce

reduce(inputArray, initialValue, lambda expression)

Riduce una matrice con una funzione di riduzione personalizzata.

Spazio dei nomi: sys.

Parametri

Parametro Richiesto Type Descrizione
inputArray array Matrice da ridurre.
initialValue qualsiasi Valore iniziale.
espressione lambda expression Espressione lambda utilizzata per aggregare il valore corrente e il valore successivo.

Valore restituito

Qualsiasi.

Esempio

Negli esempi seguenti viene illustrato come usare la funzione 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)

Gli output dell'esempio precedente sono:

Nome Type Valore
totalAge int 18
totalAgeAdd1 int 19
oddAge int 7

totalAge somma le età dei cani; totalAgeAdd1 ha un valore iniziale pari a 1 e aggiunge tutte le età del cane ai valori iniziali. oddAge somma le età dei cani che si trovano in indici pari, in particolare 5 (Evie) e 2 (Indy).

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

L'output dell'esempio precedente è:

Nome Type Valore
reduceObjectUnion oggetto {"foo":123,"bar":456,"baz":789}

La funzione unione restituisce un singolo oggetto con tutti gli elementi dei parametri. La chiamata di funzione unisce le coppie chiave-valore degli oggetti in un nuovo oggetto.

ordinamento

sort(inputArray, lambda expression)

Ordina una matrice con una funzione di ordinamento personalizzata.

Spazio dei nomi: sys.

Parametri

Parametro Richiesto Type Descrizione
inputArray array Matrice da ordinare.
espressione lambda expression Espressione lambda utilizzata per confrontare due elementi della matrice per l'ordinamento. Se true, il secondo elemento verrà ordinato dopo il primo nella matrice di output.

Valore restituito

Matrice .

Esempio

L'esempio seguente illustra come usare la funzione 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)

L'output dell'esempio precedente ordina gli oggetti dog dal più giovane al più vecchio:

Nome Type Valore
dogsByAge Matrice [{"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 una matrice in un oggetto con una funzione chiave personalizzata e una funzione valore personalizzato facoltativa. Vedere gli elementi sulla conversione di un oggetto in una matrice.

Spazio dei nomi: sys.

Parametri

Parametro Richiesto Type Descrizione
inputArray array Matrice utilizzata per la creazione di un oggetto.
espressione lambda expression Espressione lambda usata per fornire il predicato della chiave.
espressione lambda No expression Espressione lambda usata per fornire il predicato del valore.

Valore restituito

Oggetto .

Esempio

L'esempio seguente illustra come usare la funzione toObject con i due parametri obbligatori:

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)

L'esempio precedente genera un oggetto basato su una matrice.

Nome Type Valore
dogsObject Oggetto {"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"]}}

La funzione toObject seguente con il terzo parametro fornisce lo stesso output.

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

L'esempio seguente illustra come usare la funzione toObject con tre parametri.

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)

L'esempio precedente genera un oggetto basato su una matrice.

Nome Type Valore
dogsObject Oggetto {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}}

Passaggi successivi