تشير قوالب الرموز إلى أقواس. على سبيل المثال، عندما ترى الوحدات التالية، يمكنك
لنفترض أن هذا يعني -(5 + 2)
وليس -5 + 2
لأن 5
و2
جزء من
كتلة واحدة، بينما يشكّل -
جزءًا من كتلة أخرى.
ولكن إذا وضعت أقواسًا حول كل كتلة، فسيقل هذا الكود
قابلة للقراءة. المقارنة بين (((5) * (2)) + (3))
و5 * 2 + 3
. كلاهما
يتم تقييم التعبيرات نفسها إلى الشيء نفسه (13
) لكن التعبير الثاني أسهل بكثير
قراءتها.
تساعدك قواعد أسبقية عوامل التشغيل في Blockly في إنشاء الرمز بأقلّ حد ممكن عدد الأقواس، للحصول على أقصى قدر من القراءة.
إنشاء كلمة "صحيحة" ناتج
إذا لم تكن بحاجة إلى أن يكون الرمز الذي يتم إنشاؤه سهل القراءة للمستخدم، فليست هناك حاجة أن تقلق بشأن تقليل الأقواس. يعد التفاف كل كتلة طريقة جيدة، ويضمن أنّ الرمز الذي تم إنشاؤه يتم تقييمه دائمًا بشكل صحيح.
لضمان صحة الطلبات، أرسِل دائمًا 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];
}
أولوية القيمةToCode
عند استدعاء 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
الأولوية الأقوى. ويتم استخدامها في الحالات التالية:
- تريد التأكد من وضع الرمز بين قوسين دائمًا،
لذا تُرسِله إلى
valueToCode
. - لا تتضمّن المجموعة أي عوامل تشغيل، لذا يمكنك إرجاعها من منشئ رمز الحظر.
تمثّل القيمة Order.NONE
أضعف الأسبقية. ويتم استخدامها في الحالات التالية:
- تريد التأكد من وضع الرمز بين قوسين دائمًا، لذا تُرجعه من أداة إنشاء كود الحظر.
- لا توجد عوامل تشغيل على كتلة داخلية، لذا فأنت تمررها إلى
valueToCode