Delen via


Door de gebruiker gedefinieerde functies in Bicep

Binnen uw Bicep-bestand kunt u uw eigen functies maken. Deze functies zijn beschikbaar voor gebruik in uw Bicep-bestanden. Door de gebruiker gedefinieerde functies zijn gescheiden van de standaard Bicep-functies die automatisch beschikbaar zijn in uw Bicep-bestanden. Maak uw eigen functies wanneer u gecompliceerde expressies hebt die herhaaldelijk worden gebruikt in uw Bicep-bestanden. Door de gebruiker gedefinieerde functies te gebruiken, wordt taalversie 2.0 automatisch gegenereerd.

Bicep CLI versie 0.26.X of hoger is vereist voor het gebruik van deze functie.

Beperkingen

Er zijn enkele beperkingen bij het definiëren van een gebruikersfunctie:

  • De functie heeft geen toegang tot variabelen.
  • De functie kan alleen parameters gebruiken die zijn gedefinieerd in de functie.
  • De functie kan de verwijzingsfunctie of een van de lijstfuncties niet gebruiken.
  • Parameters voor de functie kunnen geen standaardwaarden hebben.

Functies definiëren

Gebruik de instructie om door de func gebruiker gedefinieerde functies te definiëren.

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

Voorbeelden

In de volgende voorbeelden ziet u hoe u door de gebruiker gedefinieerde functies definieert en gebruikt:

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

De uitvoer van de voorgaande voorbeelden is:

Name Type Weergegeven als
azureUrl String https://microsoft.com/azure
greetingArray Matrix ["Hi Evie!","Hi Neerkom!"]
greetingObject Object {"hallo":"Hallo John!"}
nameArray Matrix ["John"]
addNameArray Matrix ["Mary","Bob","John"]

Met Bicep CLI versie 0.23.X of hoger hebt u de flexibiliteit om een andere door de gebruiker gedefinieerde functie aan te roepen binnen een door de gebruiker gedefinieerde functie. In het voorgaande voorbeeld, met de functiedefinitie van sayHelloString, kunt u de sayHelloObject functie opnieuw definiëren als:

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

Door de gebruiker gedefinieerde functies ondersteunen het gebruik van door de gebruiker gedefinieerde gegevenstypen. Voorbeeld:

@minValue(0)
type positiveInt = int

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

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

output elements positiveInt = typedArg(inArray)

De uitvoer uit het voorgaande voorbeeld is:

Name Type Weergegeven als
Elementen positiveInt 3

Decorators gebruiken

Decorators worden geschreven in de notatie @expression en worden boven functiedeclaraties geplaatst. In de volgende tabel ziet u de beschikbare decorators voor functies.

Decorateur Argument Beschrijving
beschrijving tekenreeks Geef beschrijvingen op voor de functie.
exporteren Geen Geeft aan dat de functie beschikbaar is voor importeren door een ander Bicep-bestand.
metagegevens object Aangepaste eigenschappen die moeten worden toegepast op de functie. Kan een beschrijvingseigenschap bevatten die gelijk is aan de beschrijvingsdecorator.

Decorators bevinden zich in de sys-naamruimte. Als u een decorator wilt onderscheiden van een ander item met dezelfde naam, moet u de decorator vooraf laten gaan door sys. Als uw Bicep-bestand bijvoorbeeld een variabele met de naam descriptionbevat, moet u de sys-naamruimte toevoegen wanneer u de beschrijvings decorator gebruikt.

Beschrijving

Als u uitleg wilt toevoegen, voegt u een beschrijving toe aan functiedeclaratie. Voorbeeld:

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

Markdown-opgemaakte tekst kan worden gebruikt voor de beschrijvingstekst.

Export

Gebruik @export() deze functie om de functie te delen met andere Bicep-bestanden. Zie Variabelen, typen en functies exporteren voor meer informatie.

Metagegevens

Als u aangepaste eigenschappen hebt die u wilt toepassen op een door de gebruiker gedefinieerde functie, voegt u een metagegevensdecorator toe. Definieer binnen de metagegevens een object met de aangepaste namen en waarden. Het object dat u definieert voor de metagegevens kan eigenschappen van elke naam en elk type bevatten.

U kunt deze decorator gebruiken om informatie bij te houden over de functie die niet zinvol is om aan de beschrijving toe te voegen.

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

Wanneer u een @metadata() decorator verstrekt met een eigenschap die conflicteert met een andere decorator, heeft die decorator altijd voorrang op iets in de @metadata() decorator. De conflicterende eigenschap in de @metadata() waarde is dus redundant en wordt vervangen. Zie Geen conflicterende metagegevens voor meer informatie.

Volgende stappen