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.
Dalam file Bicep, Anda dapat membuat fungsi Anda sendiri. Fungsi-fungsi ini tersedia untuk digunakan dalam file Bicep Anda. Fungsi yang ditentukan pengguna terpisah dari fungsi Bicep standar yang secara otomatis tersedia dalam file Bicep Anda. Buat fungsi Anda sendiri saat Anda memiliki ekspresi rumit yang digunakan berulang kali dalam file Bicep Anda. Menggunakan fungsi yang ditentukan pengguna secara otomatis mengaktifkan pembuatan kode versi bahasa 2.0 .
Bicep CLI versi 0.26.X atau yang lebih tinggi diperlukan untuk menggunakan fitur ini.
Batasan
Ada beberapa batasan saat menentukan fungsi pengguna:
- Fungsi tersebut hanya dapat menggunakan parameter yang ditentukan dalam fungsi.
- Fungsi ini tidak dapat menggunakan fungsi referensi atau fungsi daftar apapun.
- Parameter untuk fungsi tidak dapat memiliki nilai default.
Menentukan fungsi
func
Gunakan pernyataan untuk menentukan fungsi yang ditentukan pengguna.
@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>
Contoh berikut menunjukkan cara menentukan dan menggunakan fungsi yang ditentukan pengguna:
func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'
func sayHelloString(name string) string => 'Hi ${name}!'
func sayHelloObject(name string) object => {
hello: 'Hi ${name}!'
}
func nameArray(name string) array => [
name
]
func addNameArray(name string) array => [
'Mary'
'Bob'
name
]
output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
output greetingArray array = map(['Evie', 'Casper'], name => sayHelloString(name))
output greetingObject object = sayHelloObject('John')
output nameArray array = nameArray('John')
output addNameArray array = addNameArray('John')
Output dari contoh sebelumnya adalah:
Nama | Jenis | Nilai |
---|---|---|
azureUrl | string | https://microsoft.com/azure |
arraySalam | Array | ["Hai Evie!","Hai Casper!"] |
objekSapaan | Objek | {"hello":"Hai John!"} |
nameArray | Array | ["Yohanes"] |
addNameArray | Array | ["Mary","Bob","John"] |
Anda memiliki fleksibilitas untuk memanggil fungsi lain yang ditentukan pengguna dalam fungsi yang ditentukan pengguna. Dalam contoh sebelumnya, dengan definisi sayHelloString
fungsi , Anda dapat menentukan sayHelloObject
ulang fungsi sebagai:
func sayHelloObject(name string) object => {
hello: sayHelloString(name)
}
Dukungan fungsi yang ditentukan pengguna menggunakan jenis data yang ditentukan pengguna. Contohnya:
@minValue(0)
type positiveInt = int
func typedArg(input string[]) positiveInt => length(input)
param inArray array = [
'Bicep'
'ARM'
'Terraform'
]
output elements positiveInt = typedArg(inArray)
Output dari contoh sebelumnya adalah:
Nama | Jenis | Nilai |
---|---|---|
elemen | positiveInt | 3 |
Pada Bicep CLI versi 0.30.X, fungsi yang ditentukan pengguna dapat mengakses variabel yang ditentukan dalam file Bicep yang sama. Contoh berikut menunjukkan bagaimana fungsi yang ditentukan pengguna dapat mereferensikan variabel:
var greetingPrefix = 'Hello'
func greet(name string) string => '${greetingPrefix}, ${name}!'
output message string = greet('Azure')
Output dari contoh sebelumnya adalah:
Nama | Jenis | Nilai |
---|---|---|
pesan | string | Halo, Azure! |
Dimulai dengan Bicep CLI versi 0.31.X, variabel yang diimpor dari file Bicep lain dapat diakses dalam fungsi yang ditentukan pengguna Anda, seperti variabel yang ditentukan secara lokal.
Misalkan Anda memiliki file Bicep bernama shared.bicep
yang mengekspor variabel:
// shared.bicep
@export()
var sharedPrefix = 'Contoso'
Anda dapat mengimpor variabel ini ke file Bicep utama Anda dan menggunakannya di dalam fungsi yang ditentukan pengguna:
import shared from './shared.bicep'
func makeResourceName(suffix string) string => '${shared.sharedPrefix}-${suffix}'
output resourceName string = makeResourceName('storage')
Output dari contoh sebelumnya adalah:
Nama | Jenis | Nilai |
---|---|---|
resourceName | string | Penyimpanan Contoso |
Untuk informasi selengkapnya tentang mengimpor variabel, lihat Mengekspor variabel, jenis, dan fungsi.
Menggunakan dekorator
Dekorator ditulis dalam format @expression
dan ditempatkan di atas deklarasi fungsi. Tabel berikut ini memperlihatkan dekorator yang tersedia untuk fungsi.
Dekorator | Argumen | Deskripsi |
---|---|---|
deskripsi | benang | Berikan deskripsi untuk fungsi tersebut. |
ekspor | tidak ada | Menunjukkan bahwa fungsi tersedia untuk diimpor oleh file Bicep lain. |
metadata | obyek | Properti kustom untuk diterapkan ke fungsi. Dapat mencakup properti deskripsi yang setara dengan dekorator deskripsi. |
Dekotaror berada dalam namespace layanan sys. Jika Anda perlu membedakan suatu dekorator dari item lainnya dengan nama yang sama, awali dekorator dengan sys
. Misalnya, jika file Bicep Anda menyertakan variabel bernama description
, Anda harus menambahkan namespace layanan sys saat menggunakan dekorator deskripsi .
Deskripsi
Untuk menambahkan penjelasan, tambahkan deskripsi ke deklarasi fungsi. Contohnya:
@description('The say hello function.')
func sayHelloString(name string) string => 'Hi ${name}!'
Teks berformat markdown dapat digunakan untuk teks deskripsi.
Ekspor
Gunakan @export()
untuk berbagi fungsi dengan file Bicep lainnya. Untuk informasi selengkapnya, lihat Mengekspor variabel, jenis, dan fungsi.
Metainformasi
Jika Anda memiliki properti kustom yang ingin Anda terapkan ke fungsi yang ditentukan pengguna, tambahkan dekorator metadata. Dalam metadata, tentukan objek dengan nama dan nilai kustom. Objek yang Anda tentukan untuk metadata dapat berisi properti nama dan jenis apa pun.
Anda mungkin menggunakan dekorator ini untuk melacak informasi tentang fungsi yang tidak masuk akal untuk ditambahkan ke deskripsi.
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
type settings object
Ketika Anda menyediakan @metadata()
dekorator dengan properti yang bertentangan dengan dekorator lain, dekorator itu selalu lebih diutamakan daripada apa pun di @metadata()
dekorator. Jadi, properti yang bertentangan dalam @metadata()
nilai berlebihan dan akan diganti. Untuk informasi selengkapnya, lihat Tidak ada metadata yang bertentangan.
Langkah berikutnya
- Untuk mempelajari tentang struktur dan sintaks file Bicep, lihat Memahami struktur dan sintaks file Bicep.
- Untuk daftar fungsi Bicep yang tersedia, lihat Fungsi Bicep.