Определяемые пользователем функции в Bicep
В файле Bicep можно создать собственные функции. Эти функции доступны для использования в файлах Bicep. Определяемые пользователем функции отличаются от стандартных функций Bicep, которые автоматически доступны в файлах Bicep. Создайте собственные функции при наличии сложных выражений, которые многократно используются в файлах Bicep. Использование определяемых пользователем функций автоматически включает создание кода версии 2.0 .
Ограничения
При определении пользовательской функции существуют некоторые ограничения:
- Функция не может обращаться к переменным.
- Функция может использовать только параметры, определенные в самой функции.
- Функция не может использовать эталонную функцию или любую функцию из списка функций.
- Для параметров этой функции нельзя задавать значения по умолчанию.
Определение функций
Используйте инструкцию func
для определения определяемых пользователем функций.
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
Примеры
В следующих примерах показано, как определить и использовать определяемые пользователем функции:
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')
Выходные данные из предыдущих примеров:
Имя. | Тип | значение |
---|---|---|
azureUrl | Строка | https://microsoft.com/azure |
приветствиеArray | Массив | ["Hi Evie!", "Hi Casper!"] |
greetingObject | Object | {"hello":"Привет Джон!"} |
nameArray | Массив | ["Джон"] |
addNameArray | Массив | ["Мэри", "Боб","Джон"] |
При использовании интерфейса командной строки Bicep версии 0.23.X или более поздней вы можете вызвать другую определяемую пользователем функцию в определяемой пользователем функции. В предыдущем примере с определением sayHelloString
функции можно переопределить функцию sayHelloObject
следующим образом:
func sayHelloObject(name string) object => {
hello: sayHelloString(name)
}
Определяемые пользователем функции поддерживают использование определяемых пользователем типов данных. Например:
@minValue(0)
type positiveInt = int
func typedArg(input string[]) positiveInt => length(input)
param inArray array = [
'Bicep'
'ARM'
'Terraform'
]
output elements positiveInt = typedArg(inArray)
Выходные данные из предыдущего примера:
Имя. | Тип | значение |
---|---|---|
элементы | positiveInt | 3 |
Использование декораторов
Декораторы записываются в формате @expression
и помещаются над объявлениями функций. В следующей таблице показаны доступные декораторы для функций.
Декоратор | Аргумент | Description |
---|---|---|
описание | строка | Укажите описания функции. |
Экспорт | ничего | Указывает, что функция доступна для импорта другим файлом Bicep. |
metadata | объект | Настраиваемые свойства для применения к функции. Может включать свойство "Описание", которое эквивалентно декоратору "Описание". |
Декораторы находятся в пространстве имен sys. Если вам важно, чтобы декоратор не путался с другими элементами с таким же именем, добавьте к нему префикс sys
. Например, если файл Bicep содержит переменную с именем description
, необходимо добавить пространство имен sys при использовании декоратора описания .
Description
Чтобы добавить объяснение, добавьте описание в объявление функции. Например:
@description('The say hello function.')
func sayHelloString(name string) string => 'Hi ${name}!'
Текст в формате Markdown можно использовать для текста описания.
Экспорт (Export)
Используется @export()
для совместного использования функции с другими файлами Bicep. Дополнительные сведения см. в разделе "Экспорт переменных", "типы" и "Функции".
Метаданные
Если у вас есть настраиваемые свойства, которые необходимо применить к определяемой пользователем функции, добавьте декоратор метаданных. В метаданных определите объект с настраиваемыми именами и значениями. Объект, заданный для метаданных, может содержать свойства с любым именем и типом.
Этот декоратор может использоваться для отслеживания сведений о функции, которая не имеет смысла добавлять в описание.
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
type settings object
Когда вы предоставляете декоратор с свойством @metadata()
, который конфликтует с другим декоратором, этот декоратор всегда имеет приоритет над всем в декораторе @metadata()
. Таким образом, конфликтующее свойство в значении @metadata()
является избыточным и будет заменено. Дополнительные сведения см. в разделе "Нет конфликтующих метаданных".
Следующие шаги
- Сведения о структуре и синтаксисе файлов Bicep см. в статье "Общие сведения о структуре и синтаксисе файлов Bicep".
- Список доступных функций Bicep см. в разделе "Функции Bicep".