Dela 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. Om du använder användardefinierade funktioner aktiveras automatiskt språkversion 2.0-kodgenerering .

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

Begränsningar

Det finns vissa begränsningar när du definierar en användarfunktion:

  • 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 funktioner

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

@<decorator>(<argument>)
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

Använda dekoratörer

Dekoratörer är skrivna i formatet @expression och placeras ovanför funktionsdeklarationer. I följande tabell visas tillgängliga dekoratörer för funktioner.

Dekoratör Argument beskrivning
beskrivning sträng Ange beskrivningar för funktionen.
export inget Anger att funktionen är tillgänglig för import av en annan Bicep-fil.
metadata objekt Anpassade egenskaper som ska tillämpas på funktionen. Kan innehålla en beskrivningsegenskap som motsvarar beskrivningsdekoratören.

Dekoratörer finns i sys-namnområdet. Om du behöver skilja en dekoratör från ett annat objekt med samma namn, förorda dekoratören med sys. Om din Bicep-fil till exempel innehåller en variabel med namnet descriptionmåste du lägga till sys-namnområdet när du använder beskrivningsdekoratören.

beskrivning

Lägg till en förklaring genom att lägga till en beskrivning i funktionsdeklarationen. Till exempel:

@description('The say hello function.')
func sayHelloString(name string) string => 'Hi ${name}!'

Markdown-formaterad text kan användas för beskrivningstexten.

Export

Använd @export() för att dela funktionen med andra Bicep-filer. Mer information finns i Exportera variabler, typer och funktioner.

Metadata

Om du har anpassade egenskaper som du vill tillämpa på en användardefinierad funktion lägger du till en metadatadekoratör. I metadata definierar du ett objekt med anpassade namn och värden. Objektet som du definierar för metadata kan innehålla egenskaper för valfritt namn och typ.

Du kan använda den här dekoratören för att spåra information om funktionen som inte är lämplig att lägga till i beskrivningen.

@description('Configuration values that are applied when the application starts.')
@metadata({
  source: 'database'
  contact: 'Web team'
})
type settings object

När du ger en @metadata() dekoratör en egenskap som står i konflikt med en annan dekoratör, har den dekoratören alltid företräde framför allt i dekoratören @metadata() . Därför är den motstridiga egenskapen i @metadata() värdet redundant och kommer att ersättas. Mer information finns i Inga metadata i konflikt.

Nästa steg