Aracılığıyla paylaş


Bicep'teki veri türleri

Bu makalede, Bicep'te desteklenen veri türleri açıklanmaktadır. Özel veri türlerini tanımlamak için bkz . Kullanıcı tanımlı veri türleri.

Diziler

Diziler sol köşeli ayraçla ([) başlar ve sağ köşeli ayraçla (]) biter. Bicep'te bir diziyi tek bir satırda veya birden çok satırda bildirebilirsiniz. Virgüller (,), tek satırlı bildirimlerdeki değerler arasında kullanılır, ancak birden çok satırlı bildirimlerde kullanılmaz. Tek satırlı ve çok satırlı bildirimleri karıştırabilir ve eşleştirebilirsiniz. Çok satırlı bildirim için Bicep CLI sürüm 0.7.X veya üzeri gerekir.

var multiLineArray = [
  'abc'
  'def'
  'ghi'
]

var singleLineArray = ['abc', 'def', 'ghi']

var mixedArray = ['abc', 'def'
    'ghi']

Her dizi öğesi herhangi bir türde olabilir. Her öğenin aynı veri türü olduğu bir diziniz veya farklı veri türlerini barındıran bir diziniz olabilir.

Aşağıdaki örnekte bir tamsayı dizisi ve farklı türlerden oluşan bir dizi gösterilmektedir.

var integerArray = [
  1
  2
  3
]

var mixedArray = [
  resourceGroup().name
  1
  true
  'example string'
]

Bicep'teki diziler sıfıra dayanır. Aşağıdaki örnekte ifade exampleArray[0] 1 olarak değerlendirilir ve exampleArray[2] 3 olarak değerlendirilir. Dizin oluşturucunun dizini başka bir ifade olabilir. İfade exampleArray[index] 2 olarak değerlendirilir. Tamsayı dizin oluşturucularına yalnızca dizi türlerinin ifadesinde izin verilir.

var index = 1

var exampleArray = [
  1
  2
  3
]

Dizin sınırların dışında olduğunda aşağıdaki hatayı alırsınız:

The language expression property array index 'x' is out of bounds

Bu özel durumu önlemek için, aşağıdaki örnekte gösterildiği gibi Or mantıksal işlecini kullanın:

param emptyArray array = []
param numberArray array = [1, 2, 3]

output foo bool = empty(emptyArray) || emptyArray[0] == 'bar'
output bar bool = length(numberArray) <= 3 || numberArray[3] == 4
  • İki diziyi karşılaştırmak için Karşılaştırma işleçlerini kullanın.
  • Diziden öğe almak için Dizin erişimcisini kullanın.
  • Bir dizinin öğelerine erişmek için Safe-dereference işlecini kullanın.
  • Dizileri birleştirmek için Spread kullanın.

Boolean değerleri

Boole değerleri belirttiğinizde veya falsekullanıntrue. Değeri tırnak işaretleri ile çevrelemeyin.

param exampleBool bool = true

Bkz. Mantıksal işlev

Tam Sayılar

Tamsayı değerlerini belirtirken tırnak işareti kullanmayın.

param exampleInt int = 1

Bicep tamsayıları 64 bit tamsayılardır. Bunlar satır içi parametre olarak geçirildiğinde, dağıtım için kullandığınız SDK veya komut satırı aracı değer aralığını sınırlayabilir. Örneğin, Bicep'i dağıtmak için PowerShell kullandığınızda, tamsayı türleri -2147483648 ile 2147483647 arasında değişebilir. Bu sınırlamayı önlemek için parametre dosyasında büyük tamsayı değerleri belirtin. Kaynak türleri, tamsayı özellikleri için kendi sınırlarını uygular.

Bicep, tamsayı olan belirli bir değere başvuran bir tamsayı değişmez değerini destekler. Aşağıdaki örnekte tamsayı 1 değişmez değeri türüdür ve foo yalnızca değer 1 atanabilir ve başka değer atanmamalıdır.

output foo 1 = 1

Bir tamsayı değişmez değeri türünü, önceki örnekte gösterildiği gibi satır içi veya deyiminde typebildirebilirsiniz.

type oneType = 1

output foo oneType = 1
output bar oneType = 2

Yukarıdaki örnekte, öğesine atama 2 işlemi bir BCP033 hatasıyla sonuçlanır: "Türünde 1 bir değer bekleniyor, ancak sağlanan değer türünde2bar. "

Aşağıdaki örnekte birleşim türüne sahip bir tamsayı değişmez değeri türü kullanılır:

output bar 1 | 2 | 3 = 3

Kayan nokta, ondalık veya ikili biçimler şu anda desteklenmiyor.

Bkz. Sayısal işlevler.

Nesneler

Nesneler bir sol küme ayracı ({) ile başlar ve sağ küme ayracı (}) ile biter. Bicep'te bir nesneyi tek bir satırda veya birden çok satırda bildirebilirsiniz. Nesnedeki her özellik bir anahtar ve bir değerden oluşur. Anahtar ve değer iki nokta (:) ile ayrılır. Nesne, herhangi bir türde herhangi bir özelliğe izin verir. Virgüller (,), tek satırlı bildirimlerin özellikleri arasında kullanılır, ancak çok satırlı bildirimler için özellikler arasında kullanılmaz. Tek satırlı ve çok satırlı bildirimleri karıştırabilir ve eşleştirebilirsiniz. Çok satırlı bildirim için Bicep CLI sürüm 0.7.X veya üzeri gerekir.

param singleLineObject object = {name: 'test name', id: '123-abc', isCurrent: true, tier: 1}

param multiLineObject object = {
  name: 'test name'
  id: '123-abc'
  isCurrent: true
  tier: 1
}

param mixedObject object = {name: 'test name', id: '123-abc', isCurrent: true
    tier: 1}

Bicep'te, isteğe bağlı olarak nesne özelliği anahtarlarında tırnak işaretlerine izin verilir:

var test = {
  'my - special. key': 'value'
}

Yukarıdaki örnekte, nesne özelliği anahtarları özel karakterler içerdiğinde tırnak işaretleri kullanılır. Örnek olarak boşluk, -veya verilebilir .. Aşağıdaki örnekte, nesne özelliği anahtarlarında ilişkilendirmenin nasıl kullanılacağı gösterilmektedir.

var stringVar = 'example value'
var objectVar = {
  '${stringVar}': 'this value'
}

Özellik erişimcileri bir nesnenin özelliklerine erişmek için kullanılır. Bunlar işleci kullanılarak . inşa edilir.

var a = {
  b: 'Dev'
  c: 42
  d: {
    e: true
  }
}

output result1 string = a.b // returns 'Dev'
output result2 int = a.c // returns 42
output result3 bool = a.d.e // returns true

Özellik erişimcilerini, nesne türlerinin ve nesne değişmez değerlerinin parametreleri ve değişkenleri de dahil olmak üzere herhangi bir nesneyle kullanabilirsiniz. Nesne olmayan bir türün ifadesinde kullanılan özellik erişimcisi bir hatadır.

Bir özelliğe erişmek için söz dizimini [] de kullanabilirsiniz. Aşağıdaki örnek döndürür Development.

var environmentSettings = {
  dev: {
    name: 'Development'
  }
  prod: {
    name: 'Production'
  }
}

output accessorResult string = environmentSettings['dev'].name

JSON'da nesne, sıfır veya daha fazla anahtar veya değer çiftinin sıralanmamış bir koleksiyonudur. Sıralama, uygulamalara bağlı olarak farklı olabilir. Örneğin, Bicep items() işlevi nesneleri alfabetik düzende sıralar. Diğer yerlerde, özgün sıralamayı koruyabilirsiniz. Bu belirsizlik nedeniyle, dağıtım parametreleri ve çıkışlarıyla etkileşim kuran kod yazarken nesne anahtarlarının sıralamasıyla ilgili varsayımlarda bulunmaktan kaçının.

Bir nesnenin var olmayan özelliğine eriştiğinde aşağıdaki hatayı alırsınız:

The language expression property 'foo' doesn't exist

Özel durumdan kaçınmak için, aşağıdaki örnekte gösterildiği gibi And mantıksal işlecini kullanabilirsiniz:

param objectToTest object = {
  one: 1
  two: 2
  three: 3
}

output bar bool = contains(objectToTest, 'four') && objectToTest.four == 4
  • Nesneleri karşılaştırmak için Karşılaştırma işleçlerini kullanın.
  • Bir nesneden özellik almak için Dizin erişimcisini kullanın.
  • Nesne üyelerine erişmek için Safe-dereference işlecini kullanın.
  • Nesneleri birleştirmek için Spread kullanın.

Bkz. Nesne işlevleri.

Dizeler

Bicep'te dizeler tek tırnak işaretleri ile işaretlenir ve bunları tek bir satırda bildirmeniz gerekir. ile 10FFFF arasında 0 kod noktaları olan tüm Unicode karakterlerine izin verilir.

param exampleString string = 'test value'

Aşağıdaki tabloda, ters eğik çizgi (\) karakteri kullanarak kaçış olarak kullanmanız gereken ayrılmış karakter kümesi listeleniyor:

Kaçış dizisi Temsil edilen değer Notlar
\\ \
\' '
\n Satır besleme (LF)
\r Satır başı (CR)
\t Sekme karakteri
\u{x} Unicode kod noktası x ve x (her ikisi de dahil) arasında 010FFFF onaltılık bir kod noktası değerini temsil eder. Baştaki sıfırlara izin verilir. Yukarıdaki FFFF kod noktaları vekil çift olarak yayılır.
\$ $ Yalnızca tarafından takip {edildiğinde kaçış.
// evaluates to "what's up?"
var myVar = 'what\'s up?'

Bicep, belirli bir dize değerine başvuran bir dize değişmez değeri türünü destekler. Aşağıdaki örnekte bir red dize değişmez değeri türüdür. Değerini red yalnızca öğesine redColoratayabilirsiniz.

output redColor 'red' = 'red'

Önceki örnekte gösterildiği gibi satır içi veya type deyiminde bir dize değişmez değeri türü bildirebilirsiniz.

type redColor = 'red'

output colorRed redColor = 'red'
output colorBlue redColor = 'blue'

Yukarıdaki örnekte, öğesine atama blue işlemi bir BCP033 hatasıyla sonuçlanır: "Türünde red bir değer bekleniyor, ancak sağlanan değer türündebluecolorBlue. "

Aşağıdaki örnekte birleşim türüyle kullanılan bir dize değişmez değeri türü gösterilmektedir:

type direction = 'north' | 'south' | 'east' | 'west'

output west direction = 'west'
output northWest direction = 'northwest'

Bicep'teki tüm dizeler ilişkilendirmeyi destekler. bir ifade eklemek için ve ile çevrelenin ${}. Başvuruda olunan ifadeler birden çok satıra yayılamaz.

var storageName = 'storage${uniqueString(resourceGroup().id)}'

Çok satırlı dizeler

Bicep'te çok satırlı dizeler, isteğe bağlı olarak üç tek tırnak işareti (''') ve ardından isteğe bağlı olarak bir yeni satır (açma dizisi) ve üç tek tırnak işareti (''' kapanış dizisidir) arasında tanımlanır. Açma ve kapatma sırası arasında girilen karakterler ayrıntılı olarak okunur. Kaçmak gerekli veya mümkün değildir.

Not

Bicep ayrıştırıcısı her karakteri olduğu gibi okur. Bicep dosyanızın satır sonlarına bağlı olarak, yeni satırlar veya \nolarak \r\n yorumlanır.

İlişkilendirme şu anda çok satırlı dizelerde desteklenmemektedir. Bu sınırlama nedeniyle, ilişkilendirme kullanmak yerine işlevini kullanmanız concatgerekebilir.

İçeren ''' çok satırlı dizeler desteklenmez.

// evaluates to "hello!"
var myVar = '''hello!'''

// evaluates to "hello!" because the first newline is skipped
var myVar2 = '''
hello!'''

// evaluates to "hello!\n" because the final newline is included
var myVar3 = '''
hello!
'''

// evaluates to "  this\n    is\n      indented\n"
var myVar4 = '''
  this
    is
      indented
'''

// evaluates to "comments // are included\n/* because everything is read as-is */\n"
var myVar5 = '''
comments // are included
/* because everything is read as-is */
'''

// evaluates to "interpolation\nis ${blocked}"
// note ${blocked} is part of the string, and is not evaluated as an expression
var myVar6 = '''interpolation
is ${blocked}'''

Birleşim türleri

Bicep'te birleşim türü, bir alt tür kümesinden oluşan birleşik bir türün oluşturulmasına olanak tanır. Tek tek alt tür atamalarından herhangi birine izin verilirse atama geçerli olur. Karakter, | koşul or kullanan tek tek alt türleri ayırır. Örneğin, söz dizimi a | b geçerli bir atamanın veya bolabileceği a anlamına gelir. Birleşim türleri Bicep'te izin verilen değer kısıtlamasına çevrilir, bu nedenle üye olarak yalnızca değişmez değerlere izin verilir. Birleşimler, herhangi bir sayıda değişmez değer türünde ifade içerebilir.

type color = 'Red' | 'Blue' | 'White'
type trueOrFalse = 'true' | 'false'
type permittedIntegers = 1 | 2 | 3
type oneOfSeveralObjects = {foo: 'bar'} | {fizz: 'buzz'} | {snap: 'crackle'}
type mixedTypeArray = ('fizz' | 42 | {an: 'object'} | null)[]

Tür birleşimleri , intveya boolgibi tek bir Azure Resource Manager türüne stringindirgenebilir olmalıdır. Aksi takdirde BCP294 hata kodunu alırsınız. Örneğin:

type foo = 'a' | 1

Birleşim türü bildiriminde (karakterler arasında | ) alt tür olarak herhangi bir ifade türünü kullanabilirsiniz. Örneğin, aşağıdaki örneklerin tümü geçerlidir:

type foo = 1 | 2
type bar = foo | 3
type baz = bar | (4 | 5) | 6

Özel etiketli birleşim veri türü

Bicep, çeşitli türlerden biri olabilecek bir değeri temsil eden özel etiketli birleşim veri türünü destekler. Özel etiketli birleşim veri türünü bildirmek için bir @discriminator() dekoratör kullanabilirsiniz. Bu dekoratörü kullanmak için Bicep CLI sürüm 0.21.X veya üzeri gereklidir. Söz dizimi aşağıdaki gibidir:

@discriminator('<property-name>')

Ayrımcı dekoratör, tüm birleşim üyeleri arasında paylaşılan özellik adını temsil eden tek bir parametre alır. Bu özellik adı tüm üyeler için gerekli bir dize değişmez değeri olmalıdır ve büyük/küçük harfe duyarlıdır. Birleşim üyelerindeki ayrımcı özelliğin değerleri büyük/küçük harfe duyarsız bir şekilde benzersiz olmalıdır.

type FooConfig = {
  type: 'foo'
  value: int
}

type BarConfig = {
  type: 'bar'
  value: bool
}

@discriminator('type')
param ServiceConfig  FooConfig | BarConfig | { type: 'baz', *: string } = { type: 'bar', value: true }

Parametre değeri, ayrımcı özellik değerine göre doğrulanır. Örneğin, yukarıdaki örnekte parametresi türündeyse serviceConfigfootürü kullanılarak FooConfig doğrulanır. Benzer şekilde, parametresi türündeyse bartürü kullanılarak BarConfig doğrulanır. Bu desen diğer türler için de geçerlidir.

Birleşim türünün bazı sınırlamaları vardır:

  • Birleşim türleri tek bir Azure Resource Manager türüne indirgenebilir olmalıdır. Aşağıdaki tanım geçersiz:

    type foo = 'a' | 1
    
  • Yalnızca değişmez değerlere üye olarak izin verilir.

  • Tüm değişmez değerler aynı ilkel veri türünde olmalıdır (örneğin, tüm dizeler veya tüm tamsayılar).

Birleşim türü söz dizimini kullanıcı tanımlı veri türlerinde kullanabilirsiniz.

Dizelerin ve nesnelerin güvenliğini sağlama

Güvenli dizeler dizeyle aynı biçimi, güvenli nesneler ise nesneyle aynı biçimi kullanır. Bicep ile dekoratörü bir dizeye veya nesneye eklersiniz.@secure()

Bir parametreyi güvenli bir dizeye veya güvenli nesneye ayarladığınızda, parametrenin değeri dağıtım geçmişine kaydedilmez veya günlüğe kaydedilmez. Bu güvenli değeri güvenli değer beklemediğiniz bir özelliğe ayarlarsanız, değer korunmaz. Örneğin, bir etikete güvenli bir dize ayarlarsanız, bu değer düz metin olarak depolanır. Parolalar ve gizli diziler için güvenli dizeler kullanın.

Aşağıdaki örnekte iki güvenli parametre gösterilmektedir:

@secure()
param password string

@secure()
param configValues object

Veri türü atanabilirliği

Bicep'te, bir tür (kaynak türü) değerini başka bir türe (hedef tür) atayabilirsiniz. Aşağıdaki tabloda, hangi kaynak türüne (yatay olarak listelenmiştir) hangi hedef türe atayabileceğiniz veya atayabileceğiniz (dikey olarak listelenmiştir) gösterilmektedir. Tabloda X atanabilir, boş alan atanamaz, ? ise yalnızca türler uyumluysa anlamına gelir.

Türler any error string number int bool null object array Adlandırılmış kaynak Adlandırılmış modül scope
any X X X X X X X X X X X
error
string X X
number X X X
int X X
bool X X
null X X
object X X
array X X
resource X X
module X X
scope ?
Adlandırılmış kaynak X ? ?
Adlandırılmış modül X ? ?

Sonraki adımlar

Bicep'in yapısı ve söz dizimi hakkında bilgi edinmek için bkz . Bicep dosya yapısı ve söz dizimi.