Bagikan melalui


Jenis data di Bicep

Artikel ini menjelaskan jenis data yang didukung di Bicep. Untuk menentukan jenis data kustom, lihat Jenis data yang ditentukan pengguna.

Larik

Array dimulai dengan tanda kurung siku kiri ([) dan diakhiri dengan tanda kurung siku kanan (]). Di Bicep, Anda dapat mendeklarasikan array dalam satu baris atau dalam beberapa baris. Koma (,) digunakan di antara nilai dalam deklarasi baris tunggal, tetapi tidak digunakan dalam deklarasi beberapa baris. Anda dapat mencampur dan mencocokkan deklarasi satu baris dan beberapa baris. Deklarasi beberapa baris memerlukan Bicep CLI versi 0.7.X atau yang lebih baru.

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

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

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

Setiap elemen array bisa dari jenis apa pun. Anda dapat memiliki array di mana setiap item adalah jenis data yang sama, atau array yang memegang jenis data yang berbeda.

Contoh berikut menunjukkan array bilangan bulat dan array dari berbagai jenis.

var integerArray = [
  1
  2
  3
]

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

Array di Bicep didasarkan pada nol. Dalam contoh berikut, ekspresi exampleArray[0] mengevaluasi ke 1 dan exampleArray[2] mengevaluasi ke 3. Indeks pengindeks mungkin ekspresi lain. Ekspresi exampleArray[index] mengevaluasi ke 2. Pengindeks bilangan bulat hanya diperbolehkan pada ekspresi jenis array.

var index = 1

var exampleArray = [
  1
  2
  3
]

Anda mendapatkan kesalahan berikut saat indeks berada di luar batas:

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

Untuk menghindari pengecualian ini, gunakan operator logis Or, seperti yang ditunjukkan dalam contoh berikut:

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

Saat Anda menentukan nilai Boolean, gunakan true atau false. Jangan mengapit nilai dengan tanda petik.

param exampleBool bool = true

Lihat Fungsi logis

Bilangan bulat

Saat Anda menentukan nilai bilangan bulat, jangan gunakan tanda kutip.

param exampleInt int = 1

Bilangan bulat Bicep adalah bilangan bulat 64-bit. Saat diteruskan sebagai parameter sebaris, SDK atau alat baris perintah yang Anda gunakan untuk penyebaran dapat membatasi rentang nilai. Misalnya, saat Anda menggunakan PowerShell untuk menyebarkan Bicep, jenis bilangan bulat dapat berkisar dari -2147483648 hingga 2147483647. Untuk menghindari batasan ini, tentukan nilai bilangan bulat besar dalam file parameter. Jenis sumber daya menerapkan batasannya sendiri untuk properti bilangan bulat.

Bicep mendukung jenis literal bilangan bulat yang mengacu pada nilai tertentu yang merupakan bilangan bulat yang tepat. Dalam contoh berikut, 1 adalah jenis literal bilangan bulat, dan foo hanya dapat diberi nilai 1 dan tanpa nilai lain.

output foo 1 = 1

Anda dapat mendeklarasikan jenis literal bilangan bulat baik sebaris, seperti yang ditunjukkan dalam contoh sebelumnya, atau dalam type pernyataan.

type oneType = 1

output foo oneType = 1
output bar oneType = 2

Dalam contoh sebelumnya, menetapkan untuk menghasilkan kesalahan BCP033: "Nilai jenis 1 yang diharapkan tetapi nilai yang disediakan berjenis 2."bar2

Contoh berikut menggunakan jenis literal bilangan bulat dengan jenis serikat:

output bar 1 | 2 | 3 = 3

Format titik mengambang, desimal, atau biner saat ini tidak didukung.

Lihat Fungsi numerik.

Objek

Objek dimulai dengan kurung kurawal ({) dan diakhiri dengan kurung kurawal (}). Di Bicep, Anda dapat mendeklarasikan objek dalam satu baris atau dalam beberapa baris. Setiap properti dalam objek terdiri dari kunci dan nilai. Kunci dan nilai dipisahkan oleh titik dua (:). Objek apa pun memungkinkan properti apa pun dari jenis apa pun. Koma (,) digunakan di antara properti untuk deklarasi baris tunggal, tetapi tidak digunakan di antara properti untuk deklarasi beberapa baris. Anda dapat mencampur dan mencocokkan deklarasi satu baris dan beberapa baris. Deklarasi beberapa baris memerlukan Bicep CLI versi 0.7.X atau yang lebih baru.

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}

Di Bicep, tanda kutip secara opsional diizinkan pada kunci properti objek:

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

Dalam contoh sebelumnya, tanda kutip digunakan saat kunci properti objek berisi karakter khusus. Contohnya adalah spasi, -, atau .. Contoh berikut menunjukkan cara menggunakan interpolasi dalam kunci properti objek.

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

Pengakses properti digunakan untuk mengakses properti suatu objek. Mereka dibangun dengan menggunakan . operator.

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

Anda dapat menggunakan pengakses properti dengan objek apa pun, termasuk parameter dan variabel jenis objek dan literal objek. Aksesor properti yang digunakan pada ekspresi jenis nonobject adalah kesalahan.

Anda juga dapat menggunakan sintaksis [] untuk mengakses properti. Contoh berikut akan mengembalikan Development.

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

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

Di JSON, objek adalah kumpulan yang tidak diurutkan dari nol atau lebih pasangan kunci atau nilai. Pemesanan mungkin berbeda tergantung pada implementasinya. Misalnya, fungsi item Bicep () mengurutkan objek dalam urutan alfabet. Di tempat lain, Anda dapat mempertahankan pemesanan asli. Karena nondeterminisme ini, hindari membuat asumsi tentang pengurutan kunci objek saat Anda menulis kode, yang berinteraksi dengan parameter dan output penyebaran.

Anda mendapatkan kesalahan berikut saat mengakses properti objek yang tidak ada:

The language expression property 'foo' doesn't exist

Untuk menghindari pengecualian, Anda dapat menggunakan operator logis Dan, seperti yang ditunjukkan dalam contoh berikut:

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

output bar bool = contains(objectToTest, 'four') && objectToTest.four == 4

Lihat Fungsi objek.

String

Di Bicep, string ditandai dengan tanda kutip tunggal, dan Anda harus mendeklarasikannya pada satu baris. Semua karakter Unicode dengan titik kode antara 0 dan 10FFFF diizinkan.

param exampleString string = 'test value'

Tabel berikut mencantumkan sekumpulan karakter cadangan yang harus Anda keluarkan dengan menggunakan karakter garis miring terbelakang (\):

Urutan escape Nilai terwakili Catatan
\\ \
\' '
\n Umpan baris (LF)
\r Pengembalian pengangkutan (CR)
\t Karakter tab
\u{x} Titik kode Unicode x x mewakili nilai titik kode heksadesimal antara 0 dan 10FFFF (keduanya inklusif). Nol memimpin diperbolehkan. Titik kode di atas dipancarkan FFFF sebagai pasangan pengganti.
\$ $ Hanya lolos jika diikuti oleh {.
// evaluates to "what's up?"
var myVar = 'what\'s up?'

Bicep mendukung jenis literal string yang mengacu pada nilai string tertentu. Dalam contoh berikut, red adalah jenis literal string. Anda hanya dapat menetapkan nilai red ke redColor.

output redColor 'red' = 'red'

Anda dapat mendeklarasikan jenis literal string baik sebaris, seperti yang ditunjukkan dalam contoh sebelumnya, atau dalam type pernyataan.

type redColor = 'red'

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

Dalam contoh sebelumnya, menetapkan untuk menghasilkan kesalahan BCP033: "Nilai jenis red yang diharapkan tetapi nilai yang disediakan berjenis blue."colorBlueblue

Contoh berikut menunjukkan jenis literal string yang digunakan dengan jenis union:

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

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

Semua string di Bicep mendukung interpolasi. Untuk menyuntikkan ekspresi, kelilingi dengan ${ dan }. Ekspresi yang dirujuk tidak dapat menjangkau beberapa baris.

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

String multibaris

Di Bicep, string multibaris didefinisikan antara tiga tanda kutip tunggal (''') diikuti secara opsional oleh baris baru (urutan pembukaan) dan tiga tanda kutip tunggal (''' adalah urutan penutup). Karakter yang dimasukkan antara urutan pembukaan dan penutupan dibaca verbatim. Melarikan diri tidak diperlukan atau mungkin.

Catatan

Pengurai Bicep membaca setiap karakter apa adanya. Bergantung pada akhir baris file Bicep Anda, baris baru ditafsirkan sebagai \r\n atau \n.

Interpolasi saat ini tidak didukung dalam string multibaris. Karena keterbatasan ini, Anda mungkin perlu menggunakan fungsi alih-alih concat menggunakan interpolasi.

String multibaris yang berisi ''' tidak didukung.

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

Jenis serikat pekerja

Di Bicep, jenis serikat memungkinkan pembuatan jenis gabungan yang terdiri dari sekumpulan subjenis. Penugasan valid jika salah satu penetapan subjenis individual diizinkan. Karakter | memisahkan subjenis individual yang menggunakan kondisi or . Misalnya, sintaksis a | b berarti bahwa penugasan yang valid dapat berupa a atau b. Jenis gabungan diterjemahkan ke dalam batasan nilai yang diizinkan di Bicep, sehingga hanya literal yang diizinkan sebagai anggota. Gabungan dapat menyertakan sejumlah ekspresi yang dititik harfiah.

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)[]

Jenis serikat harus dapat dididik ulang ke satu jenis Azure Resource Manager, seperti string, , intatau bool. Jika tidak, Anda mendapatkan kode kesalahan BCP294 . Contohnya:

type foo = 'a' | 1

Anda dapat menggunakan semua jenis ekspresi sebagai subjenis dalam deklarasi jenis union (di antara | karakter). Misalnya, contoh berikut semuanya valid:

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

Jenis data union yang ditandai kustom

Bicep mendukung jenis data union yang diberi tag kustom, yang mewakili nilai yang dapat menjadi salah satu dari beberapa jenis. Untuk mendeklarasikan jenis data union yang ditandai khusus, Anda dapat menggunakan @discriminator() dekorator. Bicep CLI versi 0.21.X atau yang lebih baru diperlukan untuk menggunakan dekorator ini. Sintaksnya adalah:

@discriminator('<property-name>')

Dekorator diskriminator mengambil satu parameter, yang mewakili nama properti bersama di antara semua anggota serikat. Nama properti ini harus berupa string literal yang diperlukan pada semua anggota dan peka huruf besar/kecil. Nilai properti yang didiskriminasi pada anggota serikat harus unik dengan cara yang tidak peka huruf besar/kecil.

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 }

Nilai parameter divalidasi berdasarkan nilai properti yang diskriminasi. Misalnya, dalam contoh sebelumnya, jika serviceConfig parameter berjenis foo, parameter tersebut divalidasi dengan menggunakan jenis .FooConfig Demikian pula, jika parameter berjenis bar, parameter divalidasi dengan menggunakan jenis .BarConfig Pola ini juga berlaku untuk jenis lain.

Jenis serikat memiliki beberapa batasan:

  • Jenis union harus dapat diisi ulang ke satu jenis Azure Resource Manager. Definisi berikut tidak valid:

    type foo = 'a' | 1
    
  • Hanya literal yang diizinkan sebagai anggota.

  • Semua literal harus dari jenis data primitif yang sama (misalnya, semua string atau semua bilangan bulat).

Anda dapat menggunakan sintaks jenis gabungan dalam jenis data yang ditentukan pengguna.

String dan objek yang aman

String aman menggunakan format yang sama dengan string, dan objek aman menggunakan format yang sama dengan objek. Dengan Bicep, Anda menambahkan @secure()dekorator ke string atau objek.

Saat Anda mengatur parameter ke string aman atau objek aman, nilai parameter tidak disimpan ke riwayat penyebaran atau dicatat. Jika Anda mengatur nilai aman tersebut ke properti yang tidak mengharapkan nilai aman, nilainya tidak dilindungi. Misalnya, jika Anda mengatur string aman ke tag, nilai tersebut disimpan sebagai teks biasa. Gunakan string aman untuk kata sandi dan rahasia.

Contoh berikut menunjukkan dua parameter aman:

@secure()
param password string

@secure()
param configValues object

Penetapan tipe data

Di Bicep, Anda dapat menetapkan nilai satu jenis (jenis sumber) ke jenis lain (jenis target). Tabel berikut ini memperlihatkan tipe sumber mana (tercantum secara horizontal) yang bisa atau tidak bisa Anda tetapkan ke jenis target mana (tercantum secara vertikal). Dalam tabel, X berarti dapat ditetapkan, ruang kosong berarti tidak dapat ditetapkan, dan ? berarti hanya jika jenisnya kompatibel.

Jenis any error string number int bool null object array Sumber daya bernama Modul bernama 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 ?
Sumber daya bernama X ? ?
Modul bernama X ? ?

Langkah berikutnya

Untuk mempelajari tentang struktur dan sintaks Bicep, lihat Struktur dan sintaks file Bicep.