إدراج قوس

تشير القوالب إلى وجود أقواس. على سبيل المثال، عندما تظهر لك المجموعات التالية، تفترض أنّها تعني -(5 + 2) وليس -5 + 2، لأنّ 5 و2 جزء من قالب واحد، و- جزء من مجموعة أخرى.

الوحدات التي تمثل -(5 + 2)

ولكن إذا وضعت أقواس حول كل كتلة، فإن ذلك سيجعل التعليمة البرمجية أقل قابلية للقراءة. مقارنة (((5) * (2)) + (3)) بـ 5 * 2 + 3 يتم تقييم هذَين التعبيرَين لنفس الشيء (13)، إلا أنّ التعبير الثاني أسهل في القراءة.

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

إنشاء نتيجة "صحيحة"

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

لضمان صحة هذه العملية، عليك دائمًا تمرير Order.ATOMIC إلى طلبات valueToCode، وإرجاع Order.NONE دائمًا من منشئ رمز الحظر.

إنشاء أقواس مثالية

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

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

النفي والجمع

لذلك، إذا لم تضِف أقواسًا، تحصل على -5 + 2، ويتم تقييم - قبل +، الأمر الذي لا يتطابق مع النقطتَين.

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

يأخذ valueToCode الأولوية للعامل الخارجي، ويحدد صف الرجوع أسبقية العامل الداخلي.

فيما يلي مثال على كتلة تتضمن عاملين:

يشير ذلك المصطلح إلى حظر مع عامل تشغيل نفي أحادي وعامل إضافة
وحظر فرعي.

import {javascriptGenerator, Order} from 'blockly/javascript';

javascriptGenerator.forBlock['negate_plus_two'] = function(block, generator) {
  // valueToCode takes in the precedence of the outer operator.
  const innerCode = generator.valueToCode(block, 'INNER', Order.UNARY_NEGATION);
  const code = `-${innerCode} + 2`;
  // The return tuple specifies the precedence of the inner operator.
  return [code, Order.ADDITION];
}

أولوية valueToCode

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

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

يشير ذلك المصطلح إلى حظر مع عامل تشغيل نفي أحادي وعامل إضافة
وحظر فرعي.

// The - is the strongest operator acting on the inner code.
const innerCode = generator.valueToCode(block, 'INNER', Order.UNARY_NEGATION);
const code = `-${innerCode} + 2`;

أولوية الإرجاع

عند عرض أولوية من منشئ رمز الحظر، يجب عرض الأولوية للعامل الأضعف داخل رمز المجموعة. هذا هو عامل التشغيل الذي يحتاج إلى الحماية.

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

يشير هذا المصطلح إلى مجموعة تتضمّن عامل تشغيل نفي أحادي وعامل إضافة بدون
حظر فرعي.

const code = `-${innerCode} + 2`;
// The + is the weakest operator in the block.
return [code, Order.ADDITION];

ترتيب التعداد

تحدّد كل وحدة لإنشاء اللغات تعدادًا Order يتضمّن كل الأسبقية لتلك اللغة.

الأسبقية الأقوى لها قيم دعم أقل، والأسبقية الأضعف لها قيم خلفية أعلى. يمكن اعتبار الأسبقية القوية "رتبة أعلى" من حيث القوة، والأسبقية الأضعف على أنها "أقل ترتيبًا" - كما لو كانوا مقاتلين تنافسيًا.

إليك المكان الذي يمكنك فيه العثور على تعدادات Order لجميع اللغات المدمجة:

الأسبقية الخاصة

تتطابق معظم الأسبقية في تعدادات Order الخاصة بمنشئي المحتوى مع الأسبقية التي يتم تحديدها حسب اللغات ذات الصلة المستندة إلى النص. مع ذلك، هناك أولتان خاصتان: Order.ATOMIC وOrder.NONE.

الأولوية الأقوى هي "Order.ATOMIC". يتم استخدامه في الحالات التالية:

الأولوية الأضعف هي Order.NONE. يتم استخدامه في الحالات التالية: