Bicep の safe-dereference 演算子

safe-dereference 演算子は、オブジェクトのプロパティや配列の要素に安全にアクセスする方法を提供します。 これは、プロパティまたは要素の存在や値を適切に知らずにプロパティまたは要素にアクセスしようとしたときに発生する可能性のあるエラーを防ぐのに役立ちます。

safe-dereference

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

safe-dereference 演算子は、そのオペランドが null 以外に評価される場合にのみ、メンバー アクセス .?<property>、または要素アクセス [?<index>] 演算子をそのオペランドに適用します。それ以外の場合は、null を返します。 つまり、以下のようになります。

  • anull と評価された場合、a.?x または a[?x] の結果は null です。
  • ax プロパティを持たないオブジェクトの場合、a.?xnull です。
  • a が長さが x 以下の配列の場合、a[?x]null です。
  • a が null 以外で、x という名前のプロパティがある場合、a.?x の結果は a.x の結果と同じです。
  • a が null 以外で、インデックス x に要素がある場合、a[?x] の結果は a[x] の結果と同じです

safe-dereference 演算子は短絡実行されます。 つまり、条件付きのメンバーまたは要素アクセス操作のチェーン内にある 1 つの操作から null が返された場合、残りのチェーンは実行されません。 次の例では、storageAccountsettings[?i]null であると評価されると、.?name は評価されません。

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

次のステップ