Desain aplikasi

Ada beberapa paradigma yang dapat dipilih saat mendesain aplikasi yang menggunakan Blockly. Pilihan ini harus dipertimbangkan sejak awal, karena memengaruhi blok yang akan dibutuhkan pengguna.

Konfigurasi

Banyak aplikasi Blockly digunakan untuk mendeskripsikan konfigurasi, bukan program yang dapat dieksekusi. Aplikasi konfigurasi biasanya dimulai dengan menginisialisasi satu blok tingkat root di ruang kerja. Contoh yang baik adalah tab Block Factory di Blockly Developer Tools:

Blok yang digunakan untuk mendesain blok lain. Pengguna dapat menentukan nama blok, input
blok, apakah input bersifat internal atau eksternal, dan
sebagainya.

Blockly.Blocks['factory_base'] = {
  init: function() {
    this.setDeletable(false);
    this.setMovable(false);
    this.setEditable(false);
    // etc...
  }
}

Blockly.serialization.blocks.append({'type': 'factory_base'}, workspace);

Hal ini akan membuat blok yang tidak dapat dihapus dan dipindahkan yang menyimpan semua konfigurasi pengguna. Ruang kerja dapat diserialisasi kapan saja untuk menentukan konfigurasi saat ini.

Aplikasi tersebut mungkin ingin menonaktifkan secara otomatis setiap blok yang tidak terhubung ke blok root. Hal ini dapat dilakukan dengan satu baris:

workspace.addChangeListener(Blockly.Events.disableOrphans);

Program serial

Sebagian besar aplikasi Blockly dirancang untuk membuat program bersambung. Pengguna menumpuk blok yang dieksekusi secara berurutan.

Tumpukan blok dengan perintah untuk bergerak, berbelok ke kiri, dan bergerak
lagi.

Setiap blok (yang tidak dinonaktifkan) di ruang kerja akan menjadi bagian dari program. Jika ada beberapa tumpukan blok, blok yang lebih tinggi akan dieksekusi terlebih dahulu. (Jika dua stack memiliki tinggi yang hampir sama, stack di sebelah kiri (kanan dalam mode RTL) akan diberi prioritas.)

Ruang kerja dapat diekspor ke kode yang dapat dieksekusi kapan saja. Kode ini dapat dieksekusi di sisi klien dalam JavaScript (menggunakan eval atau JS Interpreter), atau di sisi server dalam bahasa apa pun.

import {javascriptGenerator} from 'blockly/javascript';

var code = javascriptGenerator.workspaceToCode(workspace);

Program paralel

Beberapa aplikasi Blockly memilih untuk mengeksekusi semua tumpukan blok secara paralel, bukan secara serial. Contohnya adalah aplikasi musik tempat loop drum berjalan bersamaan dengan melodi.

Salah satu cara untuk menerapkan eksekusi paralel adalah dengan membuat kode untuk setiap blok secara terpisah:

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;
}

Jika bahasa targetnya adalah JavaScript, array allCode kemudian dapat digunakan untuk membuat beberapa Interpreter JS untuk eksekusi serentak. Jika bahasa targetnya seperti Python, maka array allCode dapat dirakit menjadi satu program yang menggunakan modul threading.

Seperti program paralel lainnya, keputusan yang cermat harus dibuat terkait resource bersama seperti variabel dan fungsi.

Program berbasis peristiwa

Pengendali peristiwa hanyalah fungsi yang dipanggil oleh sistem, bukan oleh program. Blok ini dapat melampirkan stack blok yang akan dieksekusi, atau dapat berupa header yang berada di atas stack blok.

Dua blok &quot;on mouse click&quot;, satu dengan input pernyataan dan satu dengan koneksi
berikutnya.

Beberapa developer suka menambahkan 'topi' ke bagian atas blok acara agar terlihat berbeda dari blok lainnya. Ini bukan tampilan default untuk Blockly, tetapi dapat ditambahkan dengan mengganti konstanta perender ADD_START_HATS menjadi true (Codelab perender kustom - Mengganti konstanta). atau dengan menambahkan tema dan menyetel opsi topi pada gaya blok. Untuk mengetahui informasi selengkapnya tentang cara menyetel topi pada blok sebagai bagian dari tema, lihat Gaya blok dalam dokumentasi tema.

Blok &quot;saat klik mouse&quot; yang sama dengan topi, yang membentuk punuk di atas
blok.

Dalam model berbasis peristiwa, sebaiknya buat juga handler untuk memulai program. Dalam model ini, setiap pemblokiran pada ruang kerja yang tidak terhubung ke pengendali peristiwa akan diabaikan dan tidak akan dieksekusi.

Saat mendesain sistem yang menggunakan peristiwa, pertimbangkan apakah mungkin atau diinginkan untuk mendukung beberapa instance handler peristiwa yang sama.

Tata letak Workspace

Ada dua cara yang wajar untuk menata letak layar dari kiri ke kanan. Salah satu cara dimulai dengan toolbar di sebelah kiri, ruang kerja di tengah, dan visualisasi output di sebelah kanan. Tata letak ini digunakan oleh Scratch versi 1, serta Made with Code.

Aplikasi dengan toolbar di sebelah kiri, ruang kerja di tengah, dan labirin (visualisasi output) di sebelah kanan.

Cara lainnya dimulai dengan visualisasi output di sebelah kiri, toolbar di tengah, dan ruang kerja di sebelah kanan. Tata letak ini digunakan oleh Scratch versi 2, serta sebagian besar aplikasi Blockly.

Aplikasi dengan labirin (visualisasi output) di sebelah kiri, toolbar di tengah, dan ruang kerja di sebelah kanan.

Dalam kedua kasus, ruang kerja harus direntangkan untuk memenuhi ukuran layar yang tersedia. Pengguna memerlukan ruang sebanyak mungkin untuk memprogram. Seperti yang dapat dilihat pada screenshot di atas, tata letak pertama berperforma buruk di layar lebar karena kode pengguna dan visualisasi output dipisahkan. Sedangkan tata letak kedua memungkinkan ruang tambahan untuk program yang lebih besar sekaligus menjaga ketiga bagian tetap berdekatan.

Pengguna juga akan lebih mudah memahami masalah yang ingin mereka pecahkan terlebih dahulu, lalu melihat alat yang disediakan, dan baru kemudian mulai memprogram.

Tentu saja seluruh urutan perlu dibalik untuk terjemahan bahasa Arab dan Ibrani.

Dalam beberapa kasus, seperti saat menggunakan sejumlah kecil blok sederhana, toolbox sebaiknya berada di atas atau di bawah ruang kerja. Blockly mendukung scroll horizontal di Toolbox untuk kasus ini, tetapi harus digunakan dengan hati-hati.

Rekomendasi: Tempatkan visualisasi program di samping toolbar.