Compartilhar via


Operador spread do Bicep

O operador spread é usado para expandir uma matriz ou objeto iterável em elementos individuais. O operador spread permite manipular facilmente matrizes ou objetos espalhando seus elementos ou propriedades em novas matrizes ou objetos.

Spread

...

O operador spread é usado para copiar propriedades de um objeto para outro ou mesclar matrizes e objetos de maneira concisa e legível.

Exemplos

O exemplo a seguir mostra o operador spread usado em um objeto:

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

Saída do exemplo:

Nome Tipo Valor
objB objeto { forma: 'círculo', cor: 'branco' }

O exemplo a seguir mostra o operador spread usado em uma matriz:

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

Saída do exemplo:

Nome Tipo Valor
arrB matriz [ 1, 2, 3, 4 ]

O exemplo a seguir mostra o spread usado vários vezes em uma única operação:

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

Saída do exemplo:

Nome Tipo Valor
arrC matriz [ 1, 2, 3, 4, 2, 3 ]

O exemplo a seguir mostra o spread sendo usado em uma operação de várias linhas:

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

Nesse uso, a vírgula não é usada entre as duas linhas. Saída do exemplo:

Nome Tipo Valor
objCombined objeto { cor: 'branco', forma: 'círculo' }

O exemplo a seguir mostra como adicionar condicionalmente um elemento de matriz:

@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})

Saída do exemplo:

Nome Tipo Valor
objB objeto { forma: “círculo”, cor: “black” }

A operação spread pode ser usada para evitar a configuração de uma propriedade opcional. No exemplo a seguir, a accessTier será definida somente se a camada de parâmetro não for uma cadeia de caracteres vazia.

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
  } 
}

O exemplo anterior também pode ser escrito como:

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} : {})
  } 
}

O operador de espalhamento pode ser usado para substituir as propriedades existentes.

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
  }
}

Próximas etapas