Share via


Användardefinierade funktioner i Bicep

I Bicep-filen kan du skapa dina egna funktioner. Dessa funktioner är tillgängliga för användning i dina Bicep-filer. Användardefinierade funktioner är separata från standardfunktionerna för Bicep som automatiskt är tillgängliga i dina Bicep-filer. Skapa dina egna funktioner när du har komplicerade uttryck som används upprepade gånger i Bicep-filerna.

Bicep CLI version 0.26.X eller senare krävs för att använda den här funktionen.

Begränsningar

När du definierar en användarfunktion finns det vissa begränsningar:

  • Funktionen kan inte komma åt variabler.
  • Funktionen kan bara använda parametrar som definieras i funktionen.
  • Funktionen kan inte använda referensfunktionen eller någon av listfunktionerna.
  • Parametrar för funktionen kan inte ha standardvärden.

Definiera funktionen

Använd -instruktionen func för att definiera användardefinierade funktioner.

func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>

Exempel

I följande exempel visas hur du definierar och använder användardefinierade funktioner:

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')

Utdata från föregående exempel är:

Namn Typ Värde
azureUrl String https://microsoft.com/azure
greetingArray Matris ["Hej Evie!","Hej Casper!"]
greetingObject Objekt {"hej":"Hej John!"}
nameArray Matris ["John"]
addNameArray Matris ["Mary","Bob","John"]

Med Bicep CLI version 0.23.X eller senare har du flexibiliteten att anropa en annan användardefinierad funktion i en användardefinierad funktion. I föregående exempel med funktionsdefinitionen för sayHelloStringkan du omdefiniera sayHelloObject funktionen som:

func sayHelloObject(name string) object => {
  hello: sayHelloString(name)
}

Användardefinierade funktioner stöder användning av användardefinierade datatyper. Till exempel:

@minValue(0)
type positiveInt = int

func typedArg(input string[]) positiveInt => length(input)

param inArray array = [
  'Bicep'
  'ARM'
  'Terraform'
]

output elements positiveInt = typedArg(inArray)

Utdata från föregående exempel är:

Namn Typ Värde
Element positiveInt 3

Nästa steg