Condividi tramite


Operatore bicep safe-dereference

L'operatore safe-dereference consente di accedere alle proprietà di un oggetto o di elementi di una matrice in modo sicuro. Consente di evitare errori che possono verificarsi quando si tenta di accedere a proprietà o elementi senza conoscere correttamente la loro esistenza o valore.

safe-dereference (dereferenziazione sicura)

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

Un operatore safe-dereference applica un accesso ai membri, .?<property>, o un accesso agli elementi, [?<index>], al relativo operando solo se l'operando restituisce un valore diverso da Null; in caso contrario, restituisce Null. Ovvero,

  • Se a restituisce null, il risultato di a.?x o a[?x] è null.
  • Se a è un oggetto che non ha una proprietà x, quindi a.?x è null.
  • Se a è una matrice la cui lunghezza è minore o uguale a x, quindi a[?x] è null.
  • Se a è diverso da null e ha una proprietà denominata x, il risultato di a.?x è uguale al risultato di a.x.
  • Se a è diverso da null e ha un elemento all'indice x, il risultato di a[?x] è uguale al risultato di a[x]

Gli operatori safe-dereference sono a corto circuito. Vale a dire, se un'operazione in una catena di operazioni condizionali di accesso a un membro o a un elemento restituisce null, l'esecuzione delle altre operazioni della catena viene interrotta. Nell’esempio seguente .?name non viene valutato se storageAccountsettings[?i] restituisce null:

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

resource storage 'Microsoft.Storage/storageAccounts@2023-04-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'
  }
}]

Passaggi successivi