Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan jenis data yang didukung di Bicep. Untuk menentukan jenis data kustom, lihat Jenis data yang ditentukan pengguna.
Larik
Array di Bicep adalah kumpulan nilai yang diurutkan—seperti string, bilangan bulat, objek, atau bahkan array lainnya—yang biasa digunakan untuk mengelompokkan item terkait seperti nama sumber daya, pengaturan konfigurasi, atau parameter. Array sangat membantu untuk mengatur data penyebaran, meneruskan daftar ke sumber daya, dan melakukan iterasi di beberapa nilai.
Array di Bicep tidak dapat diubah. Setelah dinyatakan, kontennya tidak dapat diubah. Untuk "memodifikasi" array, buat array baru menggunakan fungsi seperti concat
, map
, atau filter
.
Anda dapat mendeklarasikan array di Bicep menggunakan sintaksis baris tunggal atau multibaris. Deklarasi array multibaris 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']
Array baris tunggal menggunakan koma (,
) untuk memisahkan nilai.
Array multibaris tidak menggunakan koma di antara nilai. Anda dapat mencampur deklarasi garis tunggal dan multibaris sesuai kebutuhan.
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.
var integerArray = [
1
2
3
]
var mixedArray = [
resourceGroup().name
1
true
'example string'
]
var arrayOfObjects = [
{ name: 'dev', size: 1 }
{ name: 'prod', size: 2 }
]
Array di Bicep berbasis 0. Anda dapat mengakses elemen menurut indeks:
var exampleArray = [1, 2, 3]
output firstElement int = exampleArray[0] // 1
output thirdElement int = exampleArray[2] // 3
var index = 1
output secondElement int = exampleArray[index] // 2
Dimulai dengan Bicep CLI versi 0.34.x, Anda dapat menggunakan array[^index]
sintaks untuk mengakses elemen dari akhir array - ^1
mengacu pada elemen terakhir, ^2
ke yang kedua hingga terakhir, dan sebagainya.
var exampleArray = [1, 2, 3]
output lastElement int = exampleArray[^1] // 3
output secondToLastElement int = exampleArray[^2] // 2
Jika Anda mengakses indeks yang berada di luar batas, Anda mendapatkan kesalahan:
The language expression property array index 'x' is out of bounds
Untuk menghindari pengecualian di luar batas, 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 2
yang diharapkan tetapi nilai yang disediakan berjenis bar
."1
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 blue
yang diharapkan tetapi nilai yang disediakan berjenis colorBlue
."red
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
- Lihat Fungsi 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.
Jenis yang dapat diubah ke null
Anda dapat membuat jenis primitif atau kompleks dapat diubah ke null dengan menambahkan ?
ke nama jenis. Ini memungkinkan parameter, variabel, atau output untuk menerima null sebagai nilai yang valid. Contohnya:
output description string? = null
output config object? = null
output optionalValue int? = null
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 (atau output) ke string aman atau objek aman, nilai parameter (atau output) 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
Untuk informasi selengkapnya, lihat Parameter aman dan Output aman.
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.