Share via


Funções definidas pelo usuário no Bicep

Dentro de seu arquivo Bicep, você pode criar suas próprias funções. Essas funções estão disponíveis para uso em seu arquivos Bicep. As funções definidas pelo usuário são separadas das funções de Bicep padrão que estão automaticamente disponíveis nos seus arquivos Bicep. Crie suas próprias funções quando tiver expressões complicadas que são usadas repetidamente em seus arquivos do Bicep.

A CLI do Bicep versão 0.26.X ou superior é necessária para usar esse recurso.

Limitações

Ao definir uma função de usuário, há algumas restrições:

  • A função não pode acessar variáveis.
  • A função só pode usar os parâmetros que são definidos na função.
  • A função não pode usar a função de referência ou qualquer uma das funções de lista.
  • Os parâmetros para a função não podem ter valores padrão.

Definir a função

Use a instrução func para definir funções definidas pelo usuário.

func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>

Exemplos

Os exemplos a seguir mostram como definir e usar funções definidas pelo usuário:

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')

As saídas dos exemplos anteriores são:

Nome Tipo Valor
azureUrl String https://microsoft.com/azure
greetingArray Array ["Hi Evie!","Hi Casper!"]
greetingObject Objeto {"hello":"Hi John!"}
nameArray Array ["John"]
addNameArray Array ["Mary","Bob","John"]

Com a CLI do Bicep versão 0.23.X ou superior, você tem a flexibilidade de invocar outra função definida pelo usuário em uma função definida pelo usuário. No exemplo anterior, com a definição de função de sayHelloString, você pode redefinir a função sayHelloObject como:

func sayHelloObject(name string) object => {
  hello: sayHelloString(name)
}

As funções definidas pelo usuário dão suporte ao uso de tipos de dados definidos pelo usuário. Por exemplo:

@minValue(0)
type positiveInt = int

func typedArg(input string[]) positiveInt => length(input)

param inArray array = [
  'Bicep'
  'ARM'
  'Terraform'
]

output elements positiveInt = typedArg(inArray)

O resultado do exemplo anterior é:

Nome Tipo Valor
elementos positiveInt 3

Próximas etapas