Uživatelem definované funkce v Bicep
V souboru Bicep můžete vytvořit vlastní funkce. Tyto funkce jsou k dispozici pro použití v souborech Bicep. Uživatelem definované funkce jsou oddělené od standardních funkcí Bicep, které jsou automaticky dostupné v souborech Bicep. Vytvořte si vlastní funkce, pokud máte složité výrazy, které se opakovaně používají v souborech Bicep. Použití uživatelem definovaných funkcí automaticky povolí generování kódu verze 2.0 .
K použití této funkce se vyžaduje rozhraní příkazového řádku Bicep verze 0.26.X nebo vyšší .
Omezení
Při definování funkce uživatele existují určitá omezení:
- Funkce nemá přístup k proměnným.
- Funkce může používat pouze parametry definované ve funkci.
- Funkce nemůže použít referenční funkci ani žádnou funkci seznamu .
- Parametry pro funkci nemůžou mít výchozí hodnoty.
Definování funkcí
Pomocí příkazu func
definujte uživatelem definované funkce.
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
Příklady
Následující příklady ukazují, jak definovat a používat uživatelem definované funkce:
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')
Výstupy z předchozích příkladů jsou:
Name | Typ | Hodnota |
---|---|---|
azureUrl | String | https://microsoft.com/azure |
greetingArray | Pole | ["Ahoj Evie!","Ahoj Casper!"] |
greetingObject | Object | {"hello":"Ahoj John!"} |
nameArray | Pole | ["John"] |
addNameArray | Pole | ["Mary","Bob","John"] |
S rozhraním příkazového řádku Bicep verze 0.23.X nebo vyšší máte možnost vyvolat jinou uživatelem definovanou funkci v rámci uživatelem definované funkce. V předchozím příkladu s definicí sayHelloString
funkce můžete funkci předefinovat sayHelloObject
takto:
func sayHelloObject(name string) object => {
hello: sayHelloString(name)
}
Uživatelem definované funkce podporují použití uživatelem definovaných datových typů. Příklad:
@minValue(0)
type positiveInt = int
func typedArg(input string[]) positiveInt => length(input)
param inArray array = [
'Bicep'
'ARM'
'Terraform'
]
output elements positiveInt = typedArg(inArray)
Výstup z předchozího příkladu je:
Name | Typ | Hodnota |
---|---|---|
elementy | positiveInt | 3 |
Použití dekorátorů
Dekorátory jsou zapsány ve formátu @expression
a jsou umístěny nad deklaracemi funkce. V následující tabulce jsou uvedeny dostupné dekorátory funkcí.
Dekoratér | Argument | Popis |
---|---|---|
popis | string | Zadejte popisy funkce. |
export | Žádná | Označuje, že funkce je k dispozici pro import jiným souborem Bicep. |
metadata | objekt | Vlastní vlastnosti, které se mají použít pro funkci. Může obsahovat vlastnost popisu, která je ekvivalentní popis dekorátoru. |
Dekorátory jsou v oboru názvů sys. Pokud potřebujete odlišit dekorátor od jiné položky se stejným názvem, předkožte dekorátorem .sys
Pokud například váš soubor Bicep obsahuje proměnnou s názvem description
, musíte přidat obor názvů sys při použití dekorátoru popisu .
Popis
Pokud chcete přidat vysvětlení, přidejte popis k deklaraci funkce. Příklad:
@description('The say hello function.')
func sayHelloString(name string) string => 'Hi ${name}!'
Text ve formátu Markdown lze použít pro text popisu.
Export
Slouží @export()
ke sdílení funkce s jinými soubory Bicep. Další informace najdete v tématu Export proměnných, typů a funkcí.
Metadata
Pokud máte vlastní vlastnosti, které chcete použít u uživatelem definované funkce, přidejte dekorátor metadat. V metadatech definujte objekt s vlastními názvy a hodnotami. Objekt, který definujete pro metadata, může obsahovat vlastnosti libovolného názvu a typu.
Tento dekorátor můžete použít ke sledování informací o funkci, která nemá smysl přidat do popisu.
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
type settings object
Když poskytnete @metadata()
dekorátoru vlastnost, která je v konfliktu s jiným dekorátorem, má tento dekorátor vždy přednost před čímkoli v dekorátoru @metadata()
. Konfliktní vlastnost v rámci @metadata()
hodnoty je tedy redundantní a bude nahrazena. Další informace naleznete v tématu Žádné konfliktní metadata.
Další kroky
- Další informace o struktuře a syntaxi souborů Bicep najdete v tématu Vysvětlení struktury a syntaxe souborů Bicep.
- Seznam dostupných funkcí Bicep najdete v tématu Funkce Bicep.