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.

Desteklenen türler

Bicep içinde şu veri türlerini kullanabilirsiniz:

Diziler

Diziler sol köşeli ayraçla ([) başlar ve sağ köşeli ayraçla (]) biter. Bicep'te bir dizi tek satırda veya birden çok satırda bildirilebilir. Virgüller (,) tek satırlı bildirimlerdeki değerler arasında kullanılır, ancak ç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ürler dizisi gösterilmektedir.

var integerArray = [
  1
  2
  3
]

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

Bicep'teki diziler sıfır tabanlıdı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 kullanabilirsiniz:

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

Boolean değerleri

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

param exampleBool bool = true

Tam Sayılar

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

param exampleInt int = 1

Bicep tamsayıları 64 bit tamsayılardır. Satır içi parametre olarak geçirildiğinde, değer aralığı dağıtım için kullandığınız SDK veya komut satırı aracıyla sınırlanabilir. Örneğin, Bicep dağıtmak için PowerShell kullanırken 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 tamsayı değişmez değerini destekler. Aşağıdaki örnekte, 1 tamsayı değişmez değeri türüdür; foo'ya yalnızca 1 değeri atanabilir ve başka değer atanmamalıdır.

output foo 1 = 1

Bir tamsayı değişmez değeri türü, önceki örnekte gösterildiği gibi satır içinde veya bir type deyimde bildirilebilir.

type oneType = 1

output foo oneType = 1
output bar oneType = 2

Yukarıdaki örnekte, çıta 2 atanarak BCP033 hatasıyla sonuçlanıyor - "1" türünde bir değer bekleniyor, ancak sağlanan değer "2" türünde.

Aşağıdaki örnekte birleşim türü ile tamsayı değişmez değeri türünü kullanma gösterilmektedir:

output bar 1 | 2 | 3 = 3

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

Nesneler

Nesneler bir sol küme ayracı ({) ile başlar ve sağ küme ayracı (}) ile biter. Bicep'te bir nesne tek satırda veya birden çok satırda bildirilebilir. Bir nesnedeki her özellik anahtar ve 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şaretine 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. Örneğin boşluk, '-' veya '.'. 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şimcileri, nesne türlerinin ve nesne değişmez değerlerinin parametreleri ve değişkenleri de dahil olmak üzere herhangi bir nesneyle kullanılabilir. Nesne olmayan bir ifadede özellik erişimcisinin kullanılması 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/değer çifti içeren sıralanmamış bir koleksiyondur. 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ıralama korunabilir. Bu determinizm olmadığından, dağıtım parametreleri ve çıkışlarıyla etkileşim kuran kod yazarken nesne anahtarlarının sıralanmasıyla ilgili varsayımlarda bulunmaktan kaçının.

Bir nesnenin var olmayan özelliğine erişirken aşağıdaki hatayı alıyorsunuz:

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

Dizeler

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

param exampleString string = 'test value'

Aşağıdaki tabloda ters eğik çizgi (\) karakteriyle kaçılması gereken ayrılmış karakter kümesi listeleniyor:

Çıkış Sırası Temsil edilen değer Notlar
\\ \
\' '
\n satır besleme (LF)
\r satır başı (CR)
\t sekme karakteri
\u{x} Unicode kod noktası x x, 0 ile 10FFFF (her ikisi de dahil) arasındaki onaltılık kod noktası değerini temsil eder. Baştaki sıfırlara izin verilir. FFFF'nin üzerindeki 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 dize değişmez değerini destekler. Aşağıdaki örnekte, kırmızı bir dize değişmez değeri türüdür, redColor yalnızca kırmızı değer atanabilir ve başka değer atanmamalıdır.

output redColor 'red' = 'red'

Dize değişmez değeri türü, önceki örnekte gösterildiği gibi satır içinde veya bir type deyimde bildirilebilir.

type redColor = 'red'

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

Yukarıdaki örnekte, colorBlue'ye mavi atamak BCP033 hatasıyla sonuçlanıyor - "'kırmızı'" türünde bir değer bekleniyor, ancak sağlanan değer "'mavi'" türünde.

Aşağıdaki örnek, birleşim türüyle dize değişmez değeri türünü kullanmayı gösterir:

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 karakteri (''') ve ardından isteğe bağlı olarak yeni satır (açma sırası) ve üç tek tırnak karakteri (''' - kapanış dizisi) arasında tanımlanır. Açma ve kapatma sırası arasında girilen karakterler ayrıntılı olarak okunur ve kaçış gerekmez veya mümkün değildir.

Not

Bicep ayrıştırıcısı, Bicep dosyanızın satır sonlarına bağlı olarak tüm karakterleri olduğu gibi okuduğundan, yeni satırlar veya \nolarak \r\n yorumlanabilir.

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

İç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ştirilmiş 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, | bir veya koşulu kullanarak tek tek alt türleri ayırır. Örneğin, 'a' | söz dizimi 'b', geçerli bir atamanın 'a' veya 'b' olabileceği 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 'string', 'int' veya 'bool' gibi tek bir ARM türüne indirgenebilir olmalıdır. Aksi takdirde BCP294 hata kodunu alırsınız. Örneğin:

type foo = 'a' | 1

Herhangi bir tür ifadesi birleşim türü bildiriminde (karakterler arasında | ) alt tür olarak kullanılabilir. Ö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, birkaç farklı türden biri olabilecek bir değeri temsil etmek için kullanılan ö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, önceki örnekte serviceConfig parametresi foo türündeyse FooConfig türü kullanılarak doğrulanır. Benzer şekilde, parametre tür çubuğu ise, BarConfig türü kullanılarak doğrulanır. Bu desen diğer türler için de geçerlidir.

Birleşim türüyle ilgili bazı sınırlamalar vardır.

  • Birleşim türleri tek bir Azure Resource Manager (ARM) 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 dizimi kullanıcı tanımlı veri türlerinde kullanılabilir.

Dizelerin ve nesnelerin güvenliğini sağlama

Güvenli dize, dizeyle aynı biçimi, güvenli nesne 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 ve günlüğe kaydedilmez. Ancak, 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ğeri başka bir türe (hedef tür) atanabilir. Aşağıdaki tabloda, hangi kaynak türünün (yatay olarak listelendiği) hangi hedef türe atanabileceği veya atanabileceği (dikey olarak listelenmiştir) gösterilmektedir. Tabloda atanabilir, X boş alan atanamaz ve ? yalnızca türleri 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ı.