Operador bicep safe-dereference

O operador de dereferência segura fornece uma forma de aceder às propriedades de um objeto ou elementos de uma matriz de forma segura. Ajuda a evitar erros que podem ocorrer ao tentar aceder a propriedades ou elementos sem conhecimento adequado da sua existência ou valor.

segurança-dereferência

<base>.?<property> <base>[?<index>]

Um operador de dereferência segura aplica um acesso de membro, .?<property>ou acesso a elementos, [?<index>], operação ao operando apenas se esse operando for avaliado como não nulo; caso contrário, devolve nulo. Ou seja,

  • Se a for avaliado como null, o resultado de a.?x ou a[?x] é null.
  • Se a for um objeto que não tenha uma x propriedade, significa a.?xnull.
  • Se a for uma matriz cujo comprimento é menor ou igual a x, então a[?x] é null.
  • Se a não for nulo e tiver uma propriedade com o nome x, o resultado é a.?x igual ao resultado de a.x.
  • Se a não for nulo e tiver um elemento no índice x, o resultado de a[?x] é o mesmo que o resultado de a[x]

Os operadores de dereferência segura são de curto-circuito. Ou seja, se uma operação numa cadeia de operações de acesso condicional de membros ou elementos devolver null, o resto da cadeia não será executada. No exemplo seguinte, .?name não é avaliado se storageAccountsettings[?i] for avaliado como null:

param storageAccountSettings array = []
param storageCount int
param location string = resourceGroup().location

resource storage 'Microsoft.Storage/storageAccounts@2022-09-01' = [for i in range(0, storageCount): {
  name: storageAccountSettings[?i].?name ?? 'defaultname'
  location: storageAccountSettings[?i].?location ?? location
  kind: storageAccountSettings[?i].?kind ?? 'StorageV2'
  sku: {
    name: storageAccountSettings[?i].?sku ?? 'Standard_GRS'
  }
}]

Passos seguintes