Udostępnij za pośrednictwem


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.

Do korzystania z tej funkcji jest wymagany interfejs wiersza polecenia Bicep w wersji 0.26.X lub nowszej .

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ą sayHelloStringfunkcji 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