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 description
bevat, 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.