Aracılığıyla paylaş


Bicep'te kullanıcı tanımlı işlevler

Bicep dosyanızda kendi işlevlerinizi oluşturabilirsiniz. Bu işlevler Bicep dosyalarınızda kullanılabilir. Kullanıcı tanımlı işlevler, Bicep dosyalarınızda otomatik olarak kullanılabilen standart Bicep işlevlerinden ayrıdır. Bicep dosyalarınızda tekrar tekrar kullanılan karmaşık ifadeleriniz olduğunda kendi işlevlerinizi oluşturun. Kullanıcı tanımlı işlevlerin kullanılması, dil sürümü 2.0 kod oluşturmayı otomatik olarak etkinleştirir.

Bu özelliği kullanmak için Bicep CLI sürüm 0.26.X veya üzeri gereklidir.

Sınırlamalar

Kullanıcı işlevi tanımlarken bazı kısıtlamalar vardır:

  • İşlev değişkenlere erişemiyor.
  • İşlev yalnızca işlevde tanımlanan parametreleri kullanabilir.
  • İşlev, başvuru işlevini veya liste işlevlerini kullanamaz.
  • İşlev parametreleri varsayılan değerlere sahip olamaz.

İşlevleri tanımlama

Kullanıcı tanımlı işlevleri tanımlamak için deyimini func kullanın.

@<decorator>(<argument>)
func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>

Örnekler

Aşağıdaki örneklerde kullanıcı tanımlı işlevlerin nasıl tanımlanacağı ve kullanılacağı gösterilmektedir:

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')

Önceki örneklerden alınan çıkışlar şunlardır:

Adı Tür Değer
azureUrl String https://microsoft.com/azure
greetingArray Dizi ["Merhaba Evie!","Merhaba Casper!"]
greetingObject Object {"hello":"Merhaba John!"}
nameArray Dizi ["John"]
addNameArray Dizi ["Mary","Bob","John"]

Bicep CLI sürüm 0.23.X veya üzeriyle, kullanıcı tanımlı bir işlev içinde başka bir kullanıcı tanımlı işlevi çağırma esnekliğine sahipsiniz. Yukarıdaki örnekte işlevinin sayHelloStringtanımıyla işlevi şu şekilde yeniden tanımlayabilirsiniz sayHelloObject :

func sayHelloObject(name string) object => {
  hello: sayHelloString(name)
}

Kullanıcı tanımlı işlevler, kullanıcı tanımlı veri türlerinin kullanılmasını destekler. Örneğin:

@minValue(0)
type positiveInt = int

func typedArg(input string[]) positiveInt => length(input)

param inArray array = [
  'Bicep'
  'ARM'
  'Terraform'
]

output elements positiveInt = typedArg(inArray)

Yukarıdaki örnekten alınan çıkış:

Adı Tür Değer
öğeler positiveInt 3

Dekoratörleri kullanma

Dekoratörler biçiminde @expression yazılır ve işlev bildirimlerinin üzerine yerleştirilir. Aşağıdaki tabloda işlevler için kullanılabilir dekoratörler gösterilmektedir.

Dekoratör Bağımsız değişken Açıklama
Açıklama Dize İşlev için açıklamalar sağlayın.
export yok İşlevin başka bir Bicep dosyası tarafından içeri aktarılabilmesini gösterir.
meta veriler nesne İşleve uygulanacak özel özellikler. Açıklama dekoratörüne eşdeğer bir açıklama özelliği içerebilir.

Dekoratörler sys ad alanındadır. Dekoratörü aynı ada sahip başka bir öğeden ayırt etmeniz gerekiyorsa, dekoratörün önüne ile yazın sys. Örneğin, Bicep dosyanız adlı descriptionbir değişken içeriyorsa, açıklama dekoratörü kullanılırken sys ad alanını eklemeniz gerekir.

Açıklama

Açıklama eklemek için işlev bildirimine bir açıklama ekleyin. Örneğin:

@description('The say hello function.')
func sayHelloString(name string) string => 'Hi ${name}!'

Açıklama metni için Markdown biçimli metin kullanılabilir.

Export

İşlevi diğer Bicep dosyalarıyla paylaşmak için kullanın @export() . Daha fazla bilgi için bkz . Değişkenleri, türleri ve işlevleri dışarı aktarma.

Meta veri

Kullanıcı tanımlı bir işleve uygulamak istediğiniz özel özellikleriniz varsa bir meta veri dekoratörü ekleyin. Meta veriler içinde, özel adlara ve değerlere sahip bir nesne tanımlayın. Meta veriler için tanımladığınız nesne herhangi bir adın ve türün özelliklerini içerebilir.

Açıklamaya eklemek için anlamlı olmayan işlev hakkındaki bilgileri izlemek için bu dekoratörü kullanabilirsiniz.

@description('Configuration values that are applied when the application starts.')
@metadata({
  source: 'database'
  contact: 'Web team'
})
type settings object

Bir dekoratöre başka bir @metadata() dekoratörle çakşan bir özellik sağladığınızda, bu dekoratör her zaman dekoratördeki @metadata() her şeyden öncelikli olur. Bu nedenle, değerin @metadata() içindeki çakışan özellik yedeklidir ve değiştirilecektir. Daha fazla bilgi için bkz . Çakışan meta veri yok.

Sonraki adımlar

  • Bicep dosya yapısı ve söz dizimi hakkında bilgi edinmek için bkz . Bicep dosyalarının yapısını ve söz dizimini anlama.
  • Kullanılabilir Bicep işlevlerinin listesi için bkz . Bicep işlevleri.