Funzioni definite dall'utente in Bicep
All'interno del file Bicep è possibile creare funzioni personalizzate. Tali funzioni sono disponibili per usare i file Bicep. Le funzioni definite dall'utente sono separate dalle funzioni standard di Bicep disponibili automaticamente nei file Bicep. Creare funzioni personalizzate quando sono presenti espressioni complesse che vengono usate ripetutamente nei file Bicep. L'uso di funzioni definite dall'utente abilita automaticamente la generazione del codice della versione 2.0 del linguaggio.
Per usare questa funzionalità, è necessaria l'interfaccia della riga di comando Bicep versione 0.26.X o successive.
Limiti
Quando si definisce una funzione utente, è necessario tenere presenti alcune limitazioni:
- La funzione non può accedere alle variabili.
- La funzione può usare solo i parametri definiti in essa.
- La funzione non può usare la funzione riferimento né una qualsiasi delle funzioni dielenco.
- I parametri della funzione non possono avere valori predefiniti.
Definire le funzioni
Usare l'istruzione func
per definire funzioni definite dall'utente.
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
Esempi
Gli esempi seguenti illustrano come definire e usare funzioni definite dall'utente:
func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'
func sayHelloString(name string) string => 'Hi ${name}!'
func sayHelloObject(name string) object => {
hello: 'Hi ${name}!'
}
func nameArray(name string) array => [
name
]
func addNameArray(name string) array => [
'Mary'
'Bob'
name
]
output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
output greetingArray array = map(['Evie', 'Casper'], name => sayHelloString(name))
output greetingObject object = sayHelloObject('John')
output nameArray array = nameArray('John')
output addNameArray array = addNameArray('John')
Gli output degli esempi precedenti sono:
Nome | Type | Valore |
---|---|---|
azureUrl | String | https://microsoft.com/azure |
greetingArray | Matrice | ["Hi Evie!","Hi Casper!"] |
greetingObject | Oggetto | {"hello":"Hi John!"} |
nameArray | Matrice | ["John"] |
addNameArray | Matrice | ["Mary","Bob","John"] |
Con l'interfaccia della riga di comando di Bicep versione 0.23.X o successiva, è possibile richiamare un'altra funzione definita dall'utente all'interno di una funzione definita dall'utente. Nell'esempio precedente, con la definizione di funzione di sayHelloString
, è possibile ridefinire la funzione sayHelloObject
come:
func sayHelloObject(name string) object => {
hello: sayHelloString(name)
}
Le funzioni definite dall'utente supportano l'uso di tipi di dati definiti dall'utente. Ad esempio:
@minValue(0)
type positiveInt = int
func typedArg(input string[]) positiveInt => length(input)
param inArray array = [
'Bicep'
'ARM'
'Terraform'
]
output elements positiveInt = typedArg(inArray)
L'output dell'esempio precedente è:
Nome | Type | Valore |
---|---|---|
Elementi figlio | positiveInt | 3 |
Usare elementi Decorator
Gli elementi Decorator vengono scritti nel formato @expression
e vengono posizionati sopra le dichiarazioni di funzione. Nella tabella seguente vengono indicati gli elementi Decorator disponibili per le funzioni.
Decorator | Argomento | Descrizione |
---|---|---|
description | stringa | Consente di fornire descrizioni per la funzione. |
export | Nessuno | Indica che la funzione è disponibile per l'importazione da un altro file Bicep. |
metadata | oggetto | Proprietà personalizzate da applicare alla funzione. Può includere una proprietà description equivalente all'elemento decorator della descrizione. |
I decorator si trovano nello spazio dei nomi sys. Se è necessario distinguere un decorator da un altro elemento con lo stesso nome, anteporre al decorator con sys
. Ad esempio, se il file Bicep include una variabile denominata description
, è necessario aggiungere lo spazio dei nomi sys quando si usa l'elemento Decorator description.
Descrizione
Per specificare una spiegazione, aggiungere un elemento description alla dichiarazione della funzione. Ad esempio:
@description('The say hello function.')
func sayHelloString(name string) string => 'Hi ${name}!'
Il testo in formato Markdown può essere usato come testo dell'elemento description.
Esportazione
Usare @export()
per condividere la funzione con altri file Bicep. Per altre informazioni, vedere Esportare variabili, tipi e funzioni.
Metadati UFX
Se si dispone di proprietà personalizzate da applicare a una funzione definita dall'utente, aggiungere un elemento Decorator metadata. All'interno dei metadati definire un oggetto con i nomi e i valori personalizzati. L'oggetto definito per i metadati può contenere proprietà di qualsiasi nome e tipo.
È possibile usare questo elemento Decorator per tenere traccia delle informazioni sulla funzione che non ha senso aggiungere a description.
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
type settings object
Quando si fornisce un decorator @metadata()
con una proprietà in conflitto con un altro decorator, tale decorator ha sempre la precedenza su qualsiasi elemento nel decorator @metadata()
. Pertanto, la proprietà in conflitto all'interno del valore @metadata()
è ridondante e verrà sostituita. Per altre informazioni, vedere Nessun metadati in conflitto.
Passaggi successivi
- Per informazioni sulla struttura del file Bicep, vedere Comprendere la struttura e la sintassi dei file Bicep.
- Per un elenco delle funzioni Bicep disponibili, vedere Funzioni Bicep.