مشاركة عبر


أنواع البيانات في Bicep

توضح هذه المقالة أنواع البيانات المعتمدة في Bicep. لتعريف أنواع البيانات المخصصة، راجع أنواع البيانات المعرفة من قبل المستخدم.

الصفائف

تبدأ الصفائف بقوس أيسر ([) وتنتهي بقوس أيمن (]). في Bicep، يمكنك تعريف صفيف في سطر واحد أو في أسطر متعددة. يتم استخدام الفواصل (,) بين القيم في إعلانات سطر واحد، ولكن لا يتم استخدامها في إعلانات متعددة الأسطر. يمكنك خلط ومطابقة إعلانات سطر واحد ومتعددة الأسطر. يتطلب الإعلان متعدد الأسطر إصدار Bicep CLI 0.7.X أو أحدث.

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

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

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

يمكن أن يكون كل عنصر صفيف من أي نوع. يمكن أن يكون لديك صفيف يكون فيه كل عنصر هو نفس نوع البيانات، أو صفيف يحتوي على أنواع بيانات مختلفة.

يوضح المثال التالي صفيفا من الأعداد الصحيحة وصفيفا من أنواع مختلفة.

var integerArray = [
  1
  2
  3
]

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

تستند الصفائف في Bicep إلى الصفر. في المثال التالي، يتم تقييم التعبير exampleArray[0] إلى 1، والتعبير exampleArray[2] إلى 3. قد يكون فهرس المفهرس تعبيرا آخر. يتم تقييم التعبير exampleArray[index] إلى 2. يسمح بفهرسات الأعداد الصحيحة فقط في التعبير عن أنواع الصفائف.

var index = 1

var exampleArray = [
  1
  2
  3
]

تحصل على الخطأ التالي عندما يكون الفهرس خارج الحدود:

The language expression property array index 'x' is out of bounds

لتجنب هذا الاستثناء ، استخدم عامل التشغيل المنطقي Or، كما هو موضح في المثال التالي:

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

القيم المنطقية

عند تحديد قيم منطقية، استخدم true أو false. لا يُوضع حول القيمة علامات اقتباس.

param exampleBool bool = true

راجع الدالة المنطقية

الأعداد الصحيحة

عند تحديد قيم عدد صحيح، لا تستخدم علامات الاقتباس.

param exampleInt int = 1

أعداد Bicep الصحيحة هي أعداد صحيحة 64 بت. عند تمريرها كمعلمات مضمنة، يمكن أن تحد أداة SDK أو سطر الأوامر التي تستخدمها للتوزيع من نطاق القيم. على سبيل المثال، عند استخدام PowerShell لنشر Bicep، يمكن أن تتراوح أنواع الأعداد الصحيحة من -2147483648 إلى 2147483647. لتجنب هذا القيد، حدد قيم عدد صحيح كبير في ملف معلمات. تطبق أنواع الموارد حدودها الخاصة لخصائص الأعداد الصحيحة.

يدعم Bicep نوع حرفي عدد صحيح يشير إلى قيمة معينة عبارة عن عدد صحيح دقيق. في المثال التالي، 1 هو نوع حرفي عدد صحيح، foo ولا يمكن تعيين القيمة 1 ولا قيمة أخرى إلا.

output foo 1 = 1

يمكنك تعريف نوع حرفي عدد صحيح إما مضمن، كما هو موضح في المثال السابق، أو في عبارة type.

type oneType = 1

output foo oneType = 1
output bar oneType = 2

في المثال السابق، تعيين 2 إلى نتائج في خطأ BCP033: "توقع قيمة من النوع 1 ولكن القيمة المتوفرة من النوع 2bar ."

يستخدم المثال التالي نوع حرفي عدد صحيح بنوع اتحاد:

output bar 1 | 2 | 3 = 3

تنسيقات الفاصلة العائمة أو العشرية أو الثنائية غير مدعومة حاليا.

راجع الدالات الرقمية.

كائنات

تبدأ العناصر بقوس متعرج أيسر ({) وتنتهي بقوس متعرج أيمن (}). في Bicep، يمكنك تعريف عنصر في سطر واحد أو في أسطر متعددة. تتكون كل خاصية في كائن من مفتاح وقيمة. يتم فصل المفتاح والقيمة بنقطتين (:). عنصر يسمح بأي خاصية من أي نوع. يتم استخدام الفواصل (,) بين الخصائص للإعلانات أحادية السطر، ولكن لا يتم استخدامها بين الخصائص للإعلانات متعددة الأسطر. يمكنك خلط ومطابقة إعلانات سطر واحد ومتعددة الأسطر. يتطلب الإعلان متعدد الأسطر إصدار Bicep CLI 0.7.X أو أحدث.

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}

في Bicep، يسمح بعلامات الاقتباس اختياريا على مفاتيح خصائص الكائن:

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

في المثال السابق، يتم استخدام علامات الاقتباس عندما تحتوي مفاتيح خصائص العنصر على أحرف خاصة. ومن الأمثلة على ذلك مسافة أو -أو .. يوضح المثال التالي كيفية استخدام الاستنتاج في مفاتيح خصائص العنصر.

var stringVar = 'example value'
var objectVar = {
  '${stringVar}': 'this value'
}

يتم استخدام موصلات الخاصية للوصول إلى خصائص عنصر. يتم إنشاؤها باستخدام . عامل التشغيل .

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

يمكنك استخدام ملحقات الخصائص مع أي كائن، بما في ذلك المعلمات والمتغيرات الخاصة وأنواع الكائنات والأحرف الحرفية للكائن. موصل الخاصية المستخدم في تعبير من نوع غير كائن هو خطأ.

يمكنك أيضًا استخدام بناء الجملة [] للوصول إلى خاصية. يعمل المثال التالي على إرجاع Development.

var environmentSettings = {
  dev: {
    name: 'Development'
  }
  prod: {
    name: 'Production'
  }
}

output accessorResult string = environmentSettings['dev'].name

في JSON، الكائن هو مجموعة غير مرتبة من أزواج صفر أو أكثر من المفاتيح أو القيم. قد يكون الترتيب مختلفا اعتمادا على عمليات التنفيذ. على سبيل المثال، تقوم الدالة Bicep items() بفرز العناصر بترتيب أبجدي. في أماكن أخرى، يمكنك الاحتفاظ بالترتيب الأصلي. وبسبب هذا غير المحدد، تجنب إجراء أي افتراضات حول ترتيب مفاتيح الكائنات عند كتابة التعليمات البرمجية، والتي تتفاعل مع معلمات النشر والمخرجات.

تحصل على الخطأ التالي عند الوصول إلى خاصية غير موجودة لعنصر:

The language expression property 'foo' doesn't exist

لتجنب الاستثناء، يمكنك استخدام عامل التشغيل المنطقي و، كما هو موضح في المثال التالي:

param objectToTest object = {
  one: 1
  two: 2
  three: 3
}

output bar bool = contains(objectToTest, 'four') && objectToTest.four == 4

راجع وظائف الكائن.

السلاسل

في Bicep، يتم وضع علامة على السلاسل بعلامات اقتباس مفردة، ويجب تعريفها على سطر واحد. يسمح بجميع أحرف Unicode مع نقاط التعليمات البرمجية بين 0 و 10FFFF .

param exampleString string = 'test value'

يسرد الجدول التالي مجموعة الأحرف المحجوزة التي يجب الهروب منها باستخدام حرف مائل عكسي (\):

سلسلة الإلغاء القيمة الممثلة ملاحظات
\\ \
\' '
\n موجز الأسطر (LF)
\r إرجاع النقل (CR)
\t حرف علامة جدولة
\u{x} نقطة رمز Unicodex x يمثل قيمة نقطة تعليمة برمجية سداسية عشرية بين 0 و 10FFFF (كلاهما شامل). يُسمح باستخدام الأصفار البادئة. يتم إصدار نقاط التعليمات البرمجية أعلاه FFFF كزوج بديل.
\$ $ يتم تخطيه فقط عندما يتبعه {.
// evaluates to "what's up?"
var myVar = 'what\'s up?'

يدعم Bicep نوع سلسلة حرفي يشير إلى قيمة سلسلة معينة. في المثال التالي، red هو نوع حرفي للسلسلة. يمكنك فقط تعيين القيمة red إلى redColor.

output redColor 'red' = 'red'

يمكنك تعريف نوع حرفي لسلسلة إما مضمنا، كما هو موضح في المثال السابق، أو في عبارة type.

type redColor = 'red'

output colorRed redColor = 'red'
output colorBlue redColor = 'blue'

في المثال السابق، تعيين blue إلى نتائج في خطأ BCP033: "توقع قيمة من النوع red ولكن القيمة المتوفرة من النوع bluecolorBlue ."

يوضح المثال التالي نوع سلسلة حرفية مستخدم مع نوع اتحاد:

type direction = 'north' | 'south' | 'east' | 'west'

output west direction = 'west'
output northWest direction = 'northwest'

جميع السلاسل في Bicep تدعم الاستنتاج. لإدراج تعبير، ضعه بين ${ و}. لا يمكن أن تمتد التعبيرات المُشار إليها في عدة أسطر.

var storageName = 'storage${uniqueString(resourceGroup().id)}'

مجموعة سلاسل خطية

في Bicep، يتم تعريف السلاسل متعددة الأسطر بين ثلاث علامات اقتباس مفردة (''') متبوعة اختياريا بخط جديد (تسلسل الفتح) وثلاث علامات اقتباس مفردة (''' هو تسلسل الإغلاق). تتم قراءة الأحرف التي يتم إدخالها بين تسلسل الفتح والإغلاق حرفيا. الهروب ليس ضروريا أو ممكنا.

إشعار

يقرأ محلل Bicep كل الأحرف كما هي. اعتمادا على نهايات الأسطر لملف Bicep الخاص بك، يتم تفسير الخطوط الجديدة على أنها إما \r\n أو \n.

الاستنتاج غير مدعوم حاليا في سلاسل متعددة الأسطر. وبسبب هذا القيد، قد تحتاج إلى استخدام الدالة concat بدلا من استخدام الاستنتاج.

السلاسل متعددة الأسطر التي تحتوي على ''' غير مدعومة.

// 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}'''

أنواع الاتحاد

في Bicep، يسمح نوع الاتحاد بإنشاء نوع مجمع يتكون من مجموعة من الأنواع الفرعية. يكون التعيين صالحا إذا تم السماح بأي من تعيينات النوع الفرعي الفردية. يفصل | الحرف بين أنواع فرعية فردية or تستخدم شرطا. على سبيل المثال، يعني بناء الجملة a | b أن التعيين الصالح يمكن أن يكون إما a أو b. تتم ترجمة أنواع التوحيد إلى قيد القيمة المسموح بها في Bicep، لذلك يسمح بالأحرف الحرفية فقط كأعضاء. يمكن أن تتضمن التوحيدات أي عدد من التعبيرات الحرفية.

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)[]

يجب أن تكون نقابات النوع قابلة للتقليص إلى نوع Azure Resource Manager واحد، مثل stringأو intأو bool. وإلا، فستحصل على رمز الخطأ BCP294 . على سبيل المثال:

type foo = 'a' | 1

يمكنك استخدام أي نوع من التعبيرات كنوع فرعي في تعريف نوع الاتحاد (بين | الأحرف). على سبيل المثال، جميع الأمثلة التالية صالحة:

type foo = 1 | 2
type bar = foo | 3
type baz = bar | (4 | 5) | 6

نوع بيانات الاتحاد ذات العلامات المخصصة

يدعم Bicep نوع بيانات الاتحاد ذات العلامات المخصصة، والذي يمثل قيمة يمكن أن تكون واحدة من عدة أنواع. للإعلان عن نوع بيانات اتحاد ذات علامة مخصصة، يمكنك استخدام @discriminator() مصمم. مطلوب Bicep CLI الإصدار 0.21.X أو أحدث لاستخدام هذا المصمم. يتشكل بناء الجملة من:

@discriminator('<property-name>')

يأخذ مصمم الديكور التمييزي معلمة واحدة، والتي تمثل اسم خاصية مشتركة بين جميع أعضاء الاتحاد. يجب أن يكون اسم الخاصية هذا عبارة عن سلسلة حرفية مطلوبة على جميع الأعضاء وأن يكون حساسا لحالة الأحرف. ويجب أن تكون قيم الممتلكات التمييزية على أعضاء النقابة فريدة من نوعها بطريقة غير حساسة لحالة الأحرف.

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 }

يتم التحقق من قيمة المعلمة استنادا إلى قيمة الخاصية المميزة. على سبيل المثال، في المثال السابق، إذا كانت المعلمة serviceConfig من النوع foo، يتم التحقق من صحتها باستخدام FooConfig النوع . وبالمثل، إذا كانت المعلمة من النوع bar، يتم التحقق من صحتها باستخدام BarConfig النوع . ينطبق هذا النمط أيضا على أنواع أخرى.

يحتوي نوع الاتحاد على بعض القيود:

  • يجب أن تكون أنواع الاتحاد قابلة للخفض إلى نوع Azure Resource Manager واحد. التعريف التالي غير صحيح:

    type foo = 'a' | 1
    
  • يسمح بالأحرف الحرفية فقط كأعضاء.

  • يجب أن تكون كافة القيم الحرفية من نفس نوع البيانات البدائية (على سبيل المثال، كافة السلاسل أو كافة الأعداد الصحيحة).

يمكنك استخدام بناء جملة نوع الاتحاد في أنواع البيانات المعرفة من قبل المستخدم.

السلاسل والعناصر الآمنة

تستخدم السلاسل الآمنة نفس تنسيق السلسلة، وتستخدم العناصر الآمنة نفس تنسيق الكائن. باستخدام Bicep، يمكنك إضافة @secure()مصمم الديكور إلى سلسلة أو كائن.

عند تعيين معلمة إلى سلسلة آمنة أو كائن آمن، لا يتم حفظ قيمة المعلمة في محفوظات النشر أو تسجيلها. إذا قمت بتعيين هذه القيمة الآمنة إلى خاصية لا تتوقع قيمة آمنة، فلن تكون القيمة محمية. على سبيل المثال، إذا ضبطت سلسلة آمنة إلى علامة، يتم تخزين هذه القيمة كنص عادي. استخدم سلاسل آمنة لكلمات المرور والبيانات السرية.

يظهر المثال التالي اثنين من المعلمات الآمنة:

@secure()
param password string

@secure()
param configValues object

إمكانية تعيين نوع البيانات

في Bicep، يمكنك تعيين قيمة من نوع واحد (نوع المصدر) لنوع آخر (نوع الهدف). يوضح الجدول التالي نوع المصدر (المدرج أفقيا) الذي يمكنك أو لا يمكنك تعيينه إلى نوع الهدف (المدرج عموديا). في الجدول، تعني X قابلة للتعيين، ومسافة فارغة تعني غير قابلة للتعيين، و ? تعني فقط إذا كانت الأنواع متوافقة.

الأنواع any error string number int bool null object array المورد المسمى الوحدة النمطية المسماة 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 ?
المورد المسمى س ? ?
الوحدة النمطية المسماة س ? ?

الخطوات التالية

للتعرف على بنية وبناء جملة Bicep، راجع بنية ملف Bicep وبناء الجملة.