Sdílet prostřednictvím


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í sayHelloStringfunkce 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