Funkcje zdefiniowane przez użytkownika w Bicep
W pliku Bicep możesz utworzyć własne funkcje. Te funkcje są dostępne do użycia w plikach Bicep. Funkcje zdefiniowane przez użytkownika są oddzielone od standardowych funkcji Bicep, które są automatycznie dostępne w plikach Bicep. Utwórz własne funkcje, gdy masz skomplikowane wyrażenia, które są używane wielokrotnie w plikach Bicep. Użycie funkcji zdefiniowanych przez użytkownika automatycznie włącza generowanie kodu w wersji 2.0 języka.
Ograniczenia
Podczas definiowania funkcji użytkownika istnieją pewne ograniczenia:
- Funkcja nie może uzyskać dostępu do zmiennych.
- Funkcja może używać tylko parametrów zdefiniowanych w funkcji.
- Funkcja nie może używać funkcji reference ani żadnej z funkcji listy .
- Parametry funkcji nie mogą mieć wartości domyślnych.
Definiowanie funkcji
Użyj instrukcji func
, aby zdefiniować funkcje zdefiniowane przez użytkownika.
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
Przykłady
W poniższych przykładach pokazano, jak definiować i używać funkcji zdefiniowanych przez użytkownika:
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')
Dane wyjściowe z poprzednich przykładów to:
Nazwisko | Typ | Wartość |
---|---|---|
azureUrl | String | https://microsoft.com/azure |
greetingArray | Tablica | ["Cześć Evie!", "Cześć Casper!"] |
greetingObject | Objekt | {"hello":"Cześć John!"} |
nameArray | Tablica | ["Jan"] |
addNameArray | Tablica | ["Mary","Bob","John"] |
W przypadku interfejsu wiersza polecenia Bicep w wersji 0.23.X lub nowszej masz elastyczność wywoływania innej funkcji zdefiniowanej przez użytkownika w ramach funkcji zdefiniowanej przez użytkownika. W poprzednim przykładzie z definicją sayHelloString
funkcji można ponownie zdefiniować sayHelloObject
funkcję jako:
func sayHelloObject(name string) object => {
hello: sayHelloString(name)
}
Funkcje zdefiniowane przez użytkownika obsługują używanie typów danych zdefiniowanych przez użytkownika. Na przykład:
@minValue(0)
type positiveInt = int
func typedArg(input string[]) positiveInt => length(input)
param inArray array = [
'Bicep'
'ARM'
'Terraform'
]
output elements positiveInt = typedArg(inArray)
Dane wyjściowe z poprzedniego przykładu to:
Nazwisko | Typ | Wartość |
---|---|---|
elementy | positiveInt | 3 |
Korzystanie z dekoratorów
Dekoratory są zapisywane w formacie @expression
i umieszczane powyżej deklaracji funkcji. W poniższej tabeli przedstawiono dostępne dekoratory funkcji.
Dekorator | Argument | opis |
---|---|---|
opis | string | Podaj opisy funkcji. |
export | Brak | Wskazuje, że funkcja jest dostępna do zaimportowania przez inny plik Bicep. |
metadane | obiekt | Właściwości niestandardowe, które mają być stosowane do funkcji. Może zawierać właściwość opisu, która jest równoważna dekoratorowi opisu. |
Dekoratory znajdują się w przestrzeni nazw systemu. Jeśli musisz odróżnić dekorator od innego elementu o tej samej nazwie, należy poprzeć dekorator za pomocą polecenia sys
. Jeśli na przykład plik Bicep zawiera zmienną o nazwie description
, należy dodać przestrzeń nazw systemu podczas korzystania z dekoratora opisu .
opis
Aby dodać wyjaśnienie, dodaj opis do deklaracji funkcji. Na przykład:
@description('The say hello function.')
func sayHelloString(name string) string => 'Hi ${name}!'
Tekst w formacie markdown może służyć do tekstu opisu.
Export
Użyj @export()
polecenia , aby udostępnić funkcję innym plikom Bicep. Aby uzyskać więcej informacji, zobacz Eksportowanie zmiennych, typów i funkcji.
Metadane
Jeśli masz właściwości niestandardowe, które chcesz zastosować do funkcji zdefiniowanej przez użytkownika, dodaj dekorator metadanych. W metadanych zdefiniuj obiekt z niestandardowymi nazwami i wartościami. Obiekt zdefiniowany dla metadanych może zawierać właściwości dowolnej nazwy i typu.
Możesz użyć tego dekoratora do śledzenia informacji o funkcji, która nie ma sensu dodawać do opisu.
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
type settings object
Po podaniu dekoratora @metadata()
z właściwością, która powoduje konflikt z innym dekoratorem, dekorator zawsze ma pierwszeństwo przed wszystkimi elementami w dekoratorze @metadata()
. Dlatego właściwość powodująca konflikt w ramach @metadata()
wartości jest nadmiarowa i zostanie zamieniona. Aby uzyskać więcej informacji, zobacz Brak powodujących konflikt metadanych.
Następne kroki
- Aby dowiedzieć się więcej o strukturze i składni pliku Bicep, zobacz Omówienie struktury i składni plików Bicep.
- Aby uzyskać listę dostępnych funkcji Bicep, zobacz Funkcje Bicep.