Özel Bloklar: Engelleme Paradigmaları

Uygulama tasarlarken seçebileceğiniz birkaç paradigma vardır ve Blockly'yi kullanır. Bu tercihler göz önünde bulundurularak kullanıcının ihtiyaç duyacağı blokları etkilediği için erkenden çalışır.

Yapılandırma

Birçok Blockly uygulaması, yapılandırmaları tanımlamak için kullanılır. programlardan daha etkilidir. Yapılandırma uygulamaları genellikle Çalışma alanında bir kök düzeyinde blok başlatılıyor. Buna iyi bir örnek Blockly Geliştirici Araçları'nın Block Factory sekmesi:

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

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

Bu, her şeyi içeren silinmeyen, taşınamayan bir blok oluşturur. yapılandırdığınızdan emin olun. Çalışma alanı herhangi bir zamanda seri hale getirilebilir kullanın.

Bu tür uygulamalar, etkinleştirilmeyen tüm blokları otomatik olarak devre dışı bırakmak bağlı olur. Bu, tek bir satırdan yapılabilir:

workspace.addChangeListener(Blockly.Events.disableOrphans);

Seri Program

Blockly uygulamalarının çoğu, büyük ölçekli uygulamaların çoğunda seri oluşturmak üzere programlarında yer alır. Kullanıcılar sırayla yürütülen blokları bir araya getirir.

Çalışma alanındaki her (devre dışı bırakılmamış) engelleme, çok önemli. Birden fazla blok yığını varsa daha yüksek olanlar çalıştırılmalıdır. (İki grup yaklaşık olarak aynı yüksekliğe sahipse soldaki yığınlara (sağdan sola) öncelik verilir.)

Çalışma alanı herhangi bir zamanda yürütülebilir koda aktarılabilir. Bu kod JavaScript'te istemci tarafında yürütülebilir (eval veya JS kullanılarak çevirmen) veya sunucu tarafında oturum açmanız gerekir.

import {javascriptGenerator} from 'blockly/javascript';

var code = javascriptGenerator.workspaceToCode(workspace);

Paralel Program

Bazı Blockly uygulamaları, tüm blok yığınlarını paralel hale getirmektir. Bir müzik uygulaması buna örnek olarak melodi ile eş zamanlı olarak davul döngüsü yürütülüyor.

Paralel yürütme uygulamanın bir yolu, her bir veri türü için kod tek tek engelle:

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

Hedef dil JavaScript ise allCode dizisi Aynı anda yürütmeye yönelik birden fazla JS Çevirmeni oluşturmak için kullanılır. Eğer hedef dil Python gibi bir şey olur, ardından allCode dizisi iş parçacığı modülü kullanan tek bir programda birleştirilebilir.

Her paralel programda olduğu gibi, program yönetiminde de değişkenler ve işlevler gibi paylaşılan kaynaklar.

Etkinlik Odaklı Program

Etkinlik işleyiciler, yalnızca sistem tarafından çağrılan işlevlerdir. daha fazla bilgi edindiniz. Bu bloklar, veya bir yığının üstünde duran başlıklar olabilir. oluşturuyor.

Bazı geliştiriciler, bu görevleri ve diğer bloklardan farklı görünüyorlar. Bu, varsayılan görünüm değil Blockly, ancak oluşturucu sabitini geçersiz kılarak eklenebilir ADD_START_HATS - true (Özel oluşturucular codelab'i - Sabit değerleri geçersiz kıl). veya blok stilinde şapka seçeneği ayarlayarak başlayabilirsiniz. Daha fazla temaların parçası olarak bloklara şapka takmayla ilgili bilgiler bulabilirsiniz burada bulabilirsiniz.

Etkinlik odaklı modellerde, aynı zamanda bir işleyici de eklemek bahsetmek istiyorum. Bu modelde, çalışma alanındaki hiçbir engelleme bağlı olması yok sayılır ve yürütülmez.

Etkinliklerden yararlanan bir sistem tasarlarken, bu sistemlerin aynı olayın birden fazla örneğini desteklemek mümkün veya istenen gösterir.