Share via


Funzioni definite dall'utente in Bicep

All'interno del file Bicep è possibile creare funzioni personalizzate. Queste funzioni sono disponibili per l'uso nei file Bicep. Le funzioni definite dall'utente sono separate dalle funzioni Bicep standard disponibili automaticamente nei file Bicep. Creare funzioni personalizzate quando sono presenti espressioni complesse che vengono usate ripetutamente nei file Bicep.

Per usare questa funzionalità è necessaria l'interfaccia della riga di comando bicep versione 0.26.X o successiva .

Limiti

Quando si crea una funzione definita dall'utente, è necessario tenere presente alcune restrizioni:

  • La funzione non può accedere alle variabili.
  • La funzione può usare solo i parametri definiti in essa.
  • La funzione non può usare la funzione di riferimento o nessuna delle funzioni di elenco .
  • I parametri della funzione non possono avere valori predefiniti.

Definire la funzione

Usare l'istruzione func per definire funzioni definite dall'utente.

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 Object {"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 sayHelloObject funzione 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

Passaggi successivi