هناك العديد من النماذج للاختيار من بينها عند تصميم تطبيق التي تستخدم Blockly. يجب مراعاة هذه الخيارات مبكرًا، لأنها تؤثر على الكتل التي سيحتاجها المستخدم.
الإعداد
يُستخدَم العديد من التطبيقات المحظورة لوصف عمليات الضبط، بدلاً من من البرامج القابلة للتنفيذ. تبدأ تطبيقات التهيئة عادةً تهيئة كتلة مستوى جذر واحدة في مساحة العمل. وخير مثال على ذلك علامة التبويب "كتلة المصنع" في "أدوات مطوري البرامج بكتلة":
Blockly.Blocks['factory_base'] = {
init: function() {
this.setDeletable(false);
this.setMovable(false);
this.setEditable(false);
// etc...
}
}
Blockly.serialization.blocks.append({'type': 'factory_base'}, workspace);
يؤدي هذا إلى إنشاء كتلة غير قابلة للنقل وغير قابلة للنقل تحتوي على جميع تهيئة المستخدم. يمكن إنشاء عمليات إنشاء تسلسلية لمساحة العمل في أي وقت. لتحديد التكوين الحالي.
وقد ترغب هذه التطبيقات في إيقاف أي حظر تلقائيًا متصلة بالكتلة الجذر. ويمكن تحقيق ذلك في سطر واحد:
workspace.addChangeListener(Blockly.Events.disableOrphans);
برنامج تسلسلي
تم تصميم غالبية تطبيقات Blockly لإنشاء سلاسل والبرامج. يكدس المستخدمون الكتل معًا التي يتم تنفيذها بالترتيب.
كل جزء (غير موقوف) في مساحة العمل سيشكل جزءًا من البرنامج. إذا كانت هناك عدة مجموعات من الكتل، يتم وضع تنفيذه أولاً. (إذا كان هناك حزمتان بنفس الطول تقريبًا، ويتم إعطاء الأولوية للحزم على اليسار (اليمين في وضع RTL).
يمكن تصدير مساحة العمل إلى رمز برمجي تنفيذي في أي وقت. هذا الرمز قد يتم تنفيذه من جانب العميل في JavaScript (باستخدام eval أو JS المترجم) أو من جانب الخادم بأي لغة.
import {javascriptGenerator} from 'blockly/javascript';
var code = javascriptGenerator.workspaceToCode(workspace);
برنامج متوازٍ
تختار بعض تطبيقات حظر المحتوى تنفيذ جميع حزم الكتل في بالتوازي، وليس بشكل تسلسلي. ومن الأمثلة على ذلك تطبيق الموسيقى تُشغّل فيه حلقة طبل بالتزامن مع اللحن.
تتمثل إحدى طرق تنفيذ التنفيذ الموازي في إنشاء التعليمات البرمجية لكل كل على حدة:
import {javascriptGenerator} from 'blockly/javascript';
var json = Blockly.serialization.workspaces.save(workspace);
// Store top blocks separately, and remove them from the JSON.
var blocks = json['blocks']['blocks'];
var topBlocks = blocks.slice(); // Create shallow copy.
blocks.length = 0;
// Load each block into the workspace individually and generate code.
var allCode = [];
var headless = new Blockly.Workspace();
for (var i = 0; block < topBlocks.length; i++) {
var block = topBlocks[i];
blocks.push(block);
Blockly.serialization.workspaces.load(json, headless);
allCode.push(javascriptGenerator.workspaceToCode(headless));
blocks.length = 0;
}
إذا كانت اللغة الهدف هي JavaScript، قد يتم ضبط مصفوفة allCode
على النحو التالي:
يُستخدم لإنشاء مترجمين فوريين متعددين لـ JS للتنفيذ المتزامن. في حال حذف
تكون اللغة الهدف شيئًا مثل Python، ثم مصفوفة allCode
ويمكن تجميعها في برنامج واحد يستخدم وحدة سلسلة محادثات.
وكما هو الحال مع أي برنامج موازٍ، يجب اتخاذ قرارات دقيقة بشأن أي موارد مشتركة مثل المتغيرات والدوال.
برنامج يستند إلى الفعاليات
إنّ معالِجات الأحداث هي مجرد دوال يتمّ استدعاؤها بواسطة النظام، بدلًا من مقارنةً بالبرنامج. وقد تتضمن هذه الكتل إما مكدس الكتل المراد تنفيذها أو قد تكون رؤوسًا أعلى حزمة من الكتل.
يفضّل بعض المطوّرين إضافة "قبعة" في أعلى مجموعات الأحداث بحيث
تبدو مميزة عن الكتل الأخرى. هذا ليس المظهر الافتراضي
ممنوع، ولكن يمكن إضافته إما من خلال تجاوز ثابت العارض
من ADD_START_HATS
إلى true
(درس تطبيقي حول ترميز برامج العرض المخصّصة - إلغاء الثوابت)
أو عن طريق إضافة مظهر وتعيين خيار القبعة على نمط الكتلة. المزيد
يمكن العثور على معلومات حول وضع قبعات على الكتل كجزء من السمات
هنا.
في النموذج المستند إلى الحدث، قد يكون من المنطقي أيضًا إنشاء معالج لبدء البرنامج. وضمن هذا النموذج، لا يتم نقل أي كتلة في مساحة العمل المرتبط بمعالج حدث فلن يتم تنفيذه.
عند تصميم نظام يستخدم الأحداث، ضع في اعتبارك ما إذا كان من الممكن أو المرغوب فيه دعم مثيلات متعددة من نفس الحدث .