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.

Jenis yang didukung

Dalam Bicep, Anda dapat menggunakan jenis data ini:

Larik

Array dimulai dengan tanda kurung siku kiri ([) dan diakhiri dengan tanda kurung siku kanan (]). Di Bicep, array dapat dideklarasikan dalam satu baris atau beberapa baris. Koma (,) digunakan di antara nilai dalam deklarasi satu baris, 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 tinggi.

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

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

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

Dalam array, tiap item diwakili oleh 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 {i>arrayarray

var integerArray = [
  1
  2
  3
]

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

Array di Bicep berbasis 0. Dalam contoh berikut, ekspresi exampleArray[0] mengevaluasi ke 1 dan exampleArray[2] mengevaluasi ke 3. Indeks pengindeks itu sendiri mungkin merupakan 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, Anda dapat menggunakan 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 menentukan nilai boolean, gunakan true atau false. Jangan mengapit nilai dengan tanda petik.

param exampleBool bool = true

Bilangan bulat

Saat menentukan nilai bilangan bulat, jangan gunakan tanda kutip.

param exampleInt int = 1

Dalam Bicep, bilangan bulat adalah bilangan bulat 64-bit. Saat diteruskan sebagai parameter sebaris, rentang nilai mungkin dibatasi oleh SDK atau alat baris perintah yang Anda gunakan untuk penyebaran. Misalnya, saat 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.

Titik float, format desimal atau biner saat ini tidak didukung.

Objek

Objek dimulai dengan kurung kurawal ({) dan diakhiri dengan kurung kurawal (}). Di Bicep, sebuah objek dapat dideklarasikan dalam satu baris atau 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 satu baris, 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 tinggi.

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, kutipan diizinkan secara opsional pada kunci properti objek:

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

Pada contoh sebelumnya, kutipan digunakan ketika kunci properti objek berisi karakter khusus. Misalnya 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 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

Pengakses properti dapat digunakan dengan objek apa pun, termasuk parameter dan variabel jenis objek dan literal objek. Menggunakan pengakses properti pada ekspresi jenis non-objek 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 pasangan kunci/nilai nol atau lebih yang tidak diurutkan. Pengurutan dapat berbeda bergantung pada implementasinya. Misalnya, fungsi item() Bicep mengurutkan objek dalam urutan abjad. Di tempat lain, pengurutan asli dapat dipertahankan. Karena non-determinisme ini, hindari membuat asumsi tentang pengurutan kunci objek saat menulis kode, yang berinteraksi dengan parameter penyebaran &output.

Anda akan 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

String

Dalam Bisep, string ditandai dengan kuotasi tunggal, dan harus dinyatakan pada satu baris. Semua karakter Unicode dengan titik kode antara 0 dan 10FFFF diperbolehkan.

param exampleString string = 'test value'

Tabel berikut mencantumkan kumpulan karakter yang dicadangkan yang harus lolos dengan karakter (\) backslash:

Urutan Escape Nilai terwakili Catatan
\\ \
\' '
\n line feed (LF)
\r carriage return (CR)
\t karakter tab
\u{x} Titik kode Unicode x x mewakili nilai titik kode heksadesimal antara 0 dan 10FFFF (keduanya termasuk). Nol memimpin diperbolehkan. Poin kode di atas FFFF dipancarkan sebagai pasangan pengganti.
\$ $ Hanya lolos jika diikuti oleh {.
// evaluates to "what's up?"
var myVar = 'what\'s up?'

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 multi-baris didefinisikan antara tiga karakter kutipan tunggal (''') diikuti secara opsional oleh baris baru (urutan pembuka), dan tiga karakter kutipan tunggal (''' - urutan penutup). Karakter yang dimasukkan antara urutan pembukaan dan penutup dibaca kata demi kata, dan tidak ada pelepasan yang diperlukan atau mungkin.

Catatan

Karena parser Bicep membaca semua karakter apa adanya, tergantung pada akhir baris file Bisep Anda, baris baru dapat ditafsirkan sebagai baik \r\n atau \n.

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

String multi-line yang memuat ''' 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}'''

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 dan tidak dicatat. Namun, jika Anda mengatur nilai aman tersebut ke properti yang tidak mengharapkan nilai aman, nilai tersebut 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

Dalam Bicep, nilai dari satu jenis (tipe sumber) dapat ditetapkan ke tipe lain (tipe target). Tabel berikut menunjukkan tipe sumber mana (tercantum secara horizontal) yang dapat atau tidak dapat ditetapkan ke tipe target mana (tercantum secara vertikal). Dalam tabel, X berarti ruang kosong yang dapat ditetapkan berarti tidak dapat ditetapkan, dan ? berarti hanya jika tipenya 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 file Bicep.