Niestandardowe blokady: paradygmaty blokowe

Przy projektowaniu aplikacji można wybierać spośród kilku paradygmatów który wykorzystuje Blockly. Warto wziąć pod uwagę te wybory ponieważ mają wpływ na blokady potrzebne użytkownikowi.

Konfiguracja

Wiele aplikacji Blockly jest używanych do opisywania konfiguracji, niż wykonywalne programy. Aplikacje konfiguracyjne zwykle zaczynają się od zainicjowanie jednego bloku poziomu głównego w obszarze roboczym. Dobrym przykładem jest na karcie Block Factory w Narzędziach deweloperskich 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);

Powstanie niemożliwy do usunięcia, nieruchomy blok, w którym znajdują się konfiguracji użytkownika. Obszar roboczy może zostać zserializowany w dowolnym momencie aby określić bieżącą konfigurację.

Takie aplikacje mogą chcieć automatycznie wyłączać blokady, które nie są i połączono z blokiem głównym. Można to zrobić za pomocą jednego wiersza:

workspace.addChangeListener(Blockly.Events.disableOrphans);

Program seryjny

Większość aplikacji Blockly jest zaprojektowanych do tworzenia programów. Użytkownicy nakładają razem bloki, które są wykonywane po kolei.

Każdy (niewyłączony) blok w obszarze roboczym stanowi część programu. Jeśli masz kilka stosów bloków, wyższe . (Jeśli dwa stosy mają mniej więcej taką samą wysokość, stosy po lewej stronie (po prawej w trybie od prawej do lewej) mają priorytet).

Obszar roboczy można wyeksportować do kodu wykonywalnego w dowolnym momencie. Ten kod może być wykonywane po stronie klienta w JavaScripcie (za pomocą metody eval lub JS) tłumacza języka migowego) lub po stronie serwera w dowolnym języku.

import {javascriptGenerator} from 'blockly/javascript';

var code = javascriptGenerator.workspaceToCode(workspace);

Program równoległy

Niektóre aplikacje Blockly wybierają uruchamianie wszystkich stosów bloków w równoległe, a nie po kolei. Przykładem może być aplikacja muzyczna w którym pętla perkusji biegnie równolegle z melodią.

Jednym ze sposobów wdrożenia równoległego wykonywania jest wygenerowanie kodu dla każdego blokować pojedynczo:

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

Jeśli językiem docelowym jest JavaScript, tablica allCode może być służy do tworzenia wielu tłumaczy JavaScriptu do jednoczesnego wykonywania zadań. Jeśli język docelowy to Python, a następnie tablica allCode można połączyć w jeden program, który korzysta z modułu wątków.

Tak jak w przypadku każdego programu równoległego, należy podejmować przemyślane decyzje dotyczące wszelkie udostępnione zasoby, takie jak zmienne i funkcje.

Program oparty na zdarzeniach

Moduły obsługi zdarzeń to po prostu funkcje wywoływane przez system, niż program. Bloki te mogą obejmować stos lub mogą to być nagłówki znajdujące się na stosie bloków.

Niektórzy deweloperzy lubią dodawać „kapelusz” na początek bloków zdarzeń, różnią się od innych brył. To nie jest domyślny wygląd Blokowo, ale można go dodać przez zastąpienie stałej mechanizmu renderowania Z ADD_START_HATS do true (niestandardowe mechanizmy renderowania – zastępowanie stałych). lub dodając motyw i ustawiając opcję kapelusza dla stylu bryły. Więcej informacje na temat ustawiania nakryć głowy na blokach w ramach motywów można znaleźć tutaj.

W modelu opartym na zdarzeniach warto też utworzyć moduł obsługi przed rozpoczęciem programu. W tym modelu każda bryła w obszarze roboczym, połączone z modułem obsługi zdarzeń, będzie ignorowany i nie zostanie wykonany.

Projektując system, który wykorzystuje zdarzenia, zastanów się, czy możliwość lub konieczność obsługi wielu wystąpień tego samego zdarzenia .