Funciones de archivo de Lambda
En este artículo se describen las funciones lambda que se usarán en Bicep. Las expresiones lambda (o funciones lambda) son básicamente bloques de código que se pueden pasar como argumentos. Pueden tomar varios parámetros, pero se restan a una sola línea de código. En Bicep, la expresión lambda tiene este formato:
<lambda variable> => <expression>
Nota:
Las funciones lambda solo se admiten en la versión 0.10.X o posterior de la CLI de Bicep.
Limitaciones
La función lambda de Bicep tiene estas limitaciones:
- La expresión lambda solo se puede especificar directamente como argumentos de función en estas funciones:
filter()
,map()
,reduce()
,sort()
ytoObject()
. - Actualmente no se admite el uso de variables lambda (las variables temporales usadas en las expresiones lambda) dentro del acceso a la matriz de recursos o módulos.
- Actualmente no se admite el uso de variables lambda dentro de la función
listKeys
. - El uso de variables lambda dentro de la función de referencia no se admite actualmente.
filter
filter(inputArray, lambda expression)
Filtra una matriz con una función de filtrado personalizada.
Espacio de nombres: sys.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
inputArray | Sí | array | Matriz que se va a filtrar. |
Expresión lambda | Sí | expresión | La expresión lambda se aplica a cada elemento de matriz de entrada. Si el resultado es true, el elemento se incluirá en la matriz de salida; de lo contrario, se descarta. |
Valor devuelto
Matriz .
Ejemplos
En el siguiente ejemplo, se muestra cómo usar la función 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)
La salida del ejemplo anterior muestra los perros que son cinco o más antiguos:
Nombre | Tipo | Value |
---|---|---|
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)
El resultado del ejemplo anterior es:
Nombre | Tipo | Value |
---|---|---|
filteredLoop | Array | [6, 7, 8, 9] |
isEven | Array | [0, 2, 4, 6, 8] |
filterdLoop muestra los números de una matriz que son mayores que 5; e isEven muestra los números pares de la matriz.
mapa
map(inputArray, lambda expression)
Aplica una función de asignación personalizada a cada elemento de una matriz.
Espacio de nombres: sys.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
inputArray | Sí | array | Matriz que se va a asignar. |
Expresión lambda | Sí | expresión | Expresión lambda aplicada a cada elemento de matriz de entrada para generar la matriz de salida. |
Valor devuelto
Matriz .
Ejemplo
En el ejemplo siguiente se muestra cómo usar la función 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}!'
})
El resultado del ejemplo anterior es:
Nombre | Tipo | Value |
---|---|---|
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 muestra los nombres de los perros de la matriz de objetos; sayHi concatena "Hola" y cada uno de los nombres de los perros; y mapObject crea otra matriz de objetos.
reduce
reduce(inputArray, initialValue, lambda expression)
Reduce una matriz con una función de reducción personalizada.
Espacio de nombres: sys.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
inputArray | Sí | array | Matriz que se va a reducir. |
initialValue | Sí | cualquiera | Valor inicial. |
Expresión lambda | Sí | expresión | Expresión lambda usada para agregar el valor actual y el valor siguiente. |
Valor devuelto
Cualquiera.
Ejemplo
En el siguiente ejemplo, se muestra cómo usar la función 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)
El resultado del ejemplo anterior es:
Nombre | Tipo | Value |
---|---|---|
totalAge | int | 18 |
totalAgeAdd1 | int | 19 |
totalAge suma las edades de los perros; totalAgeAdd1 tiene un valor inicial de 1 y agrega todas las edades del perro a los valores iniciales.
output reduceObjectUnion object = reduce([
{ foo: 123 }
{ bar: 456 }
{ baz: 789 }
], {}, (cur, next) => union(cur, next))
El resultado del ejemplo anterior es:
Nombre | Tipo | Value |
---|---|---|
reduceObjectUnion | object | {"foo":123,"bar":456,"baz":789} |
La función de unión devuelve un único objeto con todos los elementos de los parámetros. La llamada de función combina los pares clave-valor de los objetos en un nuevo objeto.
sort
sort(inputArray, lambda expression)
Ordena una matriz con una función de ordenación personalizada.
Espacio de nombres: sys.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
inputArray | Sí | array | La matriz a ordenar. |
Expresión lambda | Sí | expresión | Expresión lambda usada para comparar dos elementos de matriz para ordenar. Si es true, el segundo elemento se ordenará después del primero de la matriz de salida. |
Valor devuelto
Matriz .
Ejemplo
En el ejemplo siguiente se muestra cómo usar la función 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)
La salida del ejemplo anterior ordena los objetos dog del más joven al más antiguo:
Nombre | Tipo | Value |
---|---|---|
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])
Convierte una matriz en un objeto con una función de clave personalizada y una función de valor personalizada opcional. Consulte items para obtener información sobre cómo convertir un objeto en una matriz.
Espacio de nombres: sys.
Parámetros
Parámetro | Obligatorio | Type | Descripción |
---|---|---|---|
inputArray | Sí | array | Matriz utilizada para crear un objeto. |
Expresión lambda | Sí | expresión | Expresión lambda usada para proporcionar el predicado de clave. |
Expresión lambda | No | expresión | Expresión lambda usada para proporcionar el predicado de valor. |
Valor devuelto
Objeto.
Ejemplo
En el ejemplo siguiente se muestra cómo usar la función toObject
con los dos parámetros necesarios:
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)
En el ejemplo anterior se genera un objeto basado en una matriz.
Nombre | Tipo | Value |
---|---|---|
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"]}} |
La siguiente función toObject
con el tercer parámetro proporciona la misma salida.
output dogsObject object = toObject(dogs, entry => entry.name, entry => entry)
En el ejemplo siguiente se muestra cómo usar la función toObject
con tres 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)
En el ejemplo anterior se genera un objeto basado en una matriz.
Nombre | Tipo | Value |
---|---|---|
dogsObject | Object | {"Evie":{"age":5,"interests":["Ball","Frisbee"]},"Casper":{"age":3,"interests":["Other dogs"]},"Indy":{"age":2,"interests":["Butter"]},"Kira":{"age":8,"interests":["Rubs"]}} |
Pasos siguientes
- Consulte Funciones de Bicep: matrices para obtener más funciones de Bicep relacionadas con la matriz.