Partager via


Opérateur de répartition Bicep

L’opérateur de répartition est utilisé pour développer un tableau ou un objet itérable en éléments individuels. L’opérateur de répartition vous permet de manipuler facilement des tableaux ou des objets en répartissant leurs éléments ou propriétés dans de nouveaux tableaux ou objets.

Spread

...

L’opérateur de répartition est utilisé pour copier des propriétés d’un objet vers un autre ou pour fusionner des tableaux et des objets de manière concise et lisible.

Exemples

L’exemple suivant montre l’opérateur de répartition utilisé dans un objet :

var objA = { color: 'white' }
output objB object = { shape: 'circle', ...objA } 

Résultat de l’exemple :

Nom Type Value
objB object { shape: ’circle’, color: ’white’ }

L’exemple suivant montre l’opérateur de répartition utilisé dans un tableau :

var arrA = [ 2, 3 ]
output arrB array = [ 1, ...arrA, 4 ] 

Résultat de l’exemple :

Nom Type Valeur
arrB tableau [ 1, 2, 3, 4 ]

L’exemple suivant montre la répartition utilisée plusieurs fois dans une seule opération :

var arrA = [ 2, 3 ]
output arrC array = [ 1, ...arrA, 4, ...arrA ] 

Résultat de l’exemple :

Nom Type Valeur
arrC tableau [ 1, 2, 3, 4, 2, 3 ]

L’exemple suivant montre la répartition utilisée dans une opération multiligne :

var objA = { color: 'white' }
var objB = { shape: 'circle'}
output objCombined object = { 
  ...objA 
  ...objB
} 

Dans cette utilisation, la virgule n’est pas utilisée entre les deux lignes. Résultat de l’exemple :

Nom Type Value
objCombined object { color: ’white’, shape: ’circle’ }

L’exemple suivant montre comment ajouter conditionnellement un élément de tableau :

@allowed(['white', 'black'])
param color string = 'black'

var colorWhite = { color: 'white' }
var colorBlack = { color: 'black' }

output objB object = ((color == 'white')? { shape: 'circle', ...colorWhite} : { shape: 'circle', ...colorBlack})

Résultat de l’exemple :

Nom Type Value
objB object { shape: ’circle’, color: ’black’ }

L’opération de répartition peut être utilisée pour éviter de définir une propriété facultative. Dans l’exemple suivant, accessTier est défini uniquement si le paramètre niveau n’est pas une chaîne vide.

param location string = resourceGroup().location
param tier string = 'Hot'

var storageAccountName = uniqueString(resourceGroup().id)
var accessTier = tier != '' ? {accessTier: tier} : {}

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    ...accessTier
  } 
}

L’exemple précédent peut également être écrit comme suit :

param location string = resourceGroup().location
param tier string = 'Hot'

var storageAccountName = uniqueString(resourceGroup().id)

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    ...(tier != '' ? {accessTier: tier} : {})
  } 
}

L’opérateur de propagation peut être utilisé pour remplacer les propriétés existantes.

param location string = resourceGroup().location
param storageProperties {
  accessTier: string?
}

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: uniqueString(resourceGroup().id)
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Cold'
    ...storageProperties
  }
}

Étapes suivantes