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
Operator terkait array
- Gunakan operator Perbandingan untuk membandingkan dua array.
- Gunakan Pengakses indeks untuk mendapatkan elemen dari array.
- Gunakan operator Dereferensi aman untuk mengakses elemen array.
- Gunakan Sebarkan untuk menggabungkan array.
Fungsi terkait array
- Lihat Fungsi array.
- Lihat Fungsi Lambda.
Boolean
Saat Anda menentukan nilai Boolean, gunakan true
atau false
. Jangan mengapit nilai dengan tanda petik.
param exampleBool bool = true
Operator terkait Boolean
- Gunakan operator Perbandingan untuk membandingkan nilai boolean.
- Lihat Operator logis.
Fungsi terkait Boolean
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
."bar
2
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.
Operator terkait bilangan bulat
- Lihat Operator perbandingan.
- Lihat Operator numerik.
Fungsi terkait bilangan bulat
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
Operator terkait objek
- Gunakan operator Perbandingan untuk membandingkan objek.
- Gunakan Pengakses indeks untuk mendapatkan properti dari objek.
- Gunakan Operator dereferensi aman untuk mengakses anggota objek.
- Gunakan Sebarkan untuk menggabungkan objek.
Fungsi terkait objek
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
."colorBlue
blue
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}'''
Operator terkait string
- Lihat Operator perbandingan.
Fungsi terkait string
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
, , int
atau 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.