Fonctions définies par l’utilisateur dans Bicep

Vous pouvez créer vos propres fonctions à l’intérieur du fichier Bicep. Ces fonctions peuvent être utilisées dans vos fichiers Bicep. Les fonctions définies par l’utilisateur sont distinctes des fonctions Bicep standard qui sont automatiquement disponibles dans vos fichiers Bicep. Créez vos propres fonctions lorsque vous avez des expressions complexes utilisées à plusieurs reprises dans vos fichiers Bicep.

Bicep CLI version 0.26.X ou ultérieure est nécessaire pour utiliser cette fonctionnalité.

Limites

La définition d’une fonction utilisateur est soumise à certaines restrictions :

  • La fonction ne peut pas accéder aux variables.
  • La fonction ne peut utiliser que des paramètres définis dans l’autre fonction.
  • La fonction ne peut pas utiliser la fonction reference ni aucune des fonctions list.
  • Les paramètres de la fonction ne peuvent pas avoir de valeur par défaut.

Définir la fonction

Utilisez l’instruction func pour définir des fonctions définies par l’utilisateur.

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

Exemples

Les exemples suivants montrent comment définir et utiliser des fonctions définies par l’utilisateur :

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

Les sorties des exemples précédents sont :

Nom Type Valeur
azureUrl String https://microsoft.com/azure
greetingArray Tableau ["Hi Evie!","Hi Casper!"]
greetingObject Objet {"hello":"Hi John!"}
nameArray Tableau ["John"]
addNameArray Tableau ["Mary","Bob","John"]

Avec Bicep CLI version 0.23.X ou ultérieure, vous avez la possibilité d’appeler une autre fonction définie par l’utilisateur dans une fonction définie par l’utilisateur. Dans l’exemple précédent, avec la définition de fonction de sayHelloString, vous pouvez redéfinir la fonction sayHelloObject comme suit :

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

Les fonctions définies par l’utilisateur prennent en charge l’utilisation de types de données définis par l’utilisateur. Par exemple :

@minValue(0)
type positiveInt = int

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

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

output elements positiveInt = typedArg(inArray)

La sortie de l’exemple précédent est :

Nom Type Valeur
éléments positiveInt 3

Étapes suivantes