Bağlantı kontrolleri hangi bağlantıların (ve bu nedenle engellemelerin) bağlanabileceğini kısıtlar bir iletişim kurmaktır.
Bağlantı kontrolleri, modelleme türleri için yararlıdır. Örneğin, Bu üç blokun birbirine bağlı olmadığı bir kodu temsil ederler. farklı türler döndürür:
Bu blokların bağlanmasını önlemek için bağlantı kontrolleri kullanılabilir. Bu kullanıcılara anında geri bildirim verir ve birçok basit hatayı önler.
İşleyiş şekli
Her bağlantı bir "bağlantı kontrolü" ile ilişkilendirilebilir. Bu, boş değer dize dizisidir.
Aşağıdaki durumlarda iki bağlantı bağlanabilir:
- Bunlar, uyumlu türlerdir (ör. girin).
- Bağlantı kontrollerinde en az bir dize bulunur.
Örneğin, aşağıdaki iki kontrol aynı frekansı paylaştığından
'apple'
dizesi:
['apple', 'ball', 'cat']
['apple', 'bear', 'caterpillar']
Ancak bu iki kontrol herhangi bir dizeye sahip olmadığı için bağlanamadı:
['apple', 'ball', 'cat']
['ape', 'bear', 'caterpillar']
Bir özel durum daha var. Dizilerden biri null
ise ikisi
bağlanabiliyor. Bu sayede, bir dünya ile sizin için bağlantı kurabilecek
çok kolaylaşır.
null
['ape', 'bear', 'caterpillar]
Kontrolleri ayarlayın
Varsayılan olarak tüm bağlantılar bir null
bağlantı denetimine sahiptir. Yani
bağlantı kurma olanağınız yoktur. Bağlantı kontrollerinin manuel olarak atanması gerekir.
Bağlantı denetimlerini bağlantılara nasıl atayacağınız JSON blok tanımları veya JavaScript blok tanımları kullanıp kullanmadığınıza bakmalısınız.
JSON
Üst düzey bağlantılarda kontrolü doğrudan
bağlantıyı tanımlar. Atadığınız değer null
, yani bir dize (
bağlantı kontrolündeki tek giriş olur) veya bir dize dizisi olur.
{
'type': 'custom_block',
'output': null,
'nextStatement': 'a connection check entry',
'previousStatement': ['four', 'connection', 'check', 'entries']
}
Girişler için kontrolü, girişin bir check
özelliğine atayabilirsiniz
belirler. check
özelliği yoksa kontrol kabul edilir
null
. Atadığınız değer bir dize veya bir dize dizisi olabilir.
{
'type': 'custom_block',
'message0': '%1 %2',
'args0': [
{
'type': 'input_value',
'check': 'a connection check entry'
},
{
'type': 'input_statement',
'check': ['four', 'connection', 'check', 'entries']
}
]
}
JavaScript
Üst düzey bağlantılarda, kontrolü doğrudan
bağlantıyı tanımlar. Bir değeri iletmemeniz durumunda kontrol,
null
İlettiğiniz değer bir dize olabilir (bu,
bağlantı kontrolü) veya bir dize dizisi kullanılır.
Blockly.Blocks['custom_block'] = {
init: function() {
this.setOutput(true); // null check
this.setNextStatement(true, 'a connection check entry');
this.setPreviousStatement(true, ['four', 'connection', 'check', 'entries']);
}
}
Girişler için şunları kontrol ettikten sonra kontrolü setCheck
yöntemine geçirebilirsiniz:
girdiyi tanımladı. setCheck
yöntemi çağrılmazsa kontrol
null
dikkate alındı. İlettiğiniz değer bir dize veya bir dize dizisi olabilir.
Blockly.Blocks['custom_block'] = {
init: function() {
this.appendValueInput('NAME')
.setCheck('a connection check entry');
this.appendStatementInput('NAME')
.setCheck(['four', 'connection', 'check', 'entries']);
}
}
Yerleşik kontrol dizeleri
Yerleşik bloklarda 'Array'
değerleriyle bağlantı kontrolleri vardır.
'Boolean'
, 'Colour'
, 'Number'
ve 'String'
. Engellemelerinizin
yerleşik bloklarla birlikte çalıştıklarından emin olmak için bu değerleri,
uyumlu olmalıdır.
Değer örnekleri
Giriş ve çıkışlar için bağlantı kontrollerini tanımlarken genellikle kontrollerin türleri temsil ettiği düşünülmelidir.
Girişler kontroller her "türü" içermelidir ve şu sonuçları verir: kontroller "döndürdükleri" içeriği tam olarak içermelidir.
Tek bir türü kabul et
En temel durumda, "kabul eden" bir blok oluşturun veya "returns" her tür için bağlantının bağlantı kontrolüne de eklenmesi gerekir.
Birden fazla türü kabul et
"Kabul eden" bir blok oluşturmak için farklı türler varsa her bir türü kabul edilen bağlantı türünü girin.
Standart olarak, bir çıktı bazen birden fazla durumda kabul edilebiliyorsa (örneğin, sayıların bazen dize olarak kullanılmasına izin verirseniz) çıkış ve girişler daha esnek olmalıdır. Bu kural çıkışların desteklenmediği yerlerde bağlanmamasını sağlar.
Tüm türleri kabul et
"Kabul eden" bir blok oluşturmak için her türde için, girişin
null
bağlantısı kontrolü yapılıyor.
Alt türleri döndürün
"Geri gelen" bir blok oluşturmak için alt tür olarak görünüyorsa hem türü hem de ve çıkışın bağlantı kontrolündeki süper yazı tipini seçin.
Alt türler söz konusu olduğunda, bir çıkış kontrolünde birden fazla denetim olabilir. çünkü blok her zaman "döndürür" kullanabilirsiniz.
Parametre haline getirilmiş türleri döndürün
"Geri gelen" bir blok oluşturmak için parametre haline getirilmiş bir tür için çıkışın parametresindeki parametreli sürümü ve parametre içermeyen sürümü bağlantı kontrolü.
Engelleme dilinizin ne kadar katı olmasını istediğinize bağlı olarak, türün varyanslarını dahil edin.
Alt türlerde olduğu gibi, bir çıkış kontrolünde de birden fazla denetim olabilir bu durumda, engelleme her zaman "döndürür" kullanabilirsiniz.
Yığın veya ifade örnekleri
Geliştiricilerin önceki ve sonrakine yönelik kontrolleri tanımlamaları için yaygın olarak kullanılan birkaç yöntem vardır. bağlantılar. Bunları genellikle blokların sıralamasının kısıtlanması olarak düşünürsünüz.
Sonraki bağlantılar, hangi blokların mevcut bloku izlemesi gerektiğini içermelidir. önceki bağlantılar mevcut bloğun "ne olduğunu" içerir.
Blokları sıralı tutun
Belirli bir sırayla bağlanan bir blok dizisi oluşturmak için Bir sonraki bağlantı kontrolünde hangi blokların geçerli olanı izlemesi gerektiğini ve mevcut blok "nedir" kontrol edin.
Çok sayıda orta bloğa izin verin
Çok sayıda orta bloğa izin veren bir sıralı blok kümesi oluşturmak için şunları yapmanız gerekir: orta bloğun önceki bağlantı kontrolünden en az bir giriş içermelidir orta bloğun bir sonraki bağlantı kontrolünü tamamlayacaktır. Bu, engellemenin takip edilmesine olanak tanır çok daha fazlasını yapar.
Orta bloklara izin verme
Orta blokların isteğe bağlı olduğu bir sıralı blok kümesi oluşturmak için her iki orta bloğun önceki bağlantısından en az bir giriş dahil etmek ve son bloğun önceki bağlantı kontrolünü, ilk bloğun bir sonraki bağlantı kontrolü. Bu, ilk bloğun ardından ortadaki bir blokun gelmesine izin verir. veya son blok olabilir.
İkisinden biri veya gruplar
Yalnızca bir gruptaki bloklar veya bloklar izlenebilecek bir blok oluşturmak için başka birinde (ikisinden birinde değil) iki şey yapmanız gerekir:
Önceki grupların her ikisinden de en az bir giriş eklemelisiniz bağlantısını kontrol eder.
Grupların özelliklerini tanımlamanız gerekir yalnızca değerleri içeren bir sonraki bağlantı kontrolünün Bunlar, önceki bağlantı kontrollerinde bulunan (böylece yalnızca aynı grubun bloklarına göre).
Sınırlamalar
Bu sistem oldukça sağlamdır ve birçok kullanım durumunu çözebilir, ancak sınırlamaları vardır.
Daha geniş bağlamı kısıtlayın
Bu sistem, "daha geniş bağlamın" kısıtlanmasını tek başına desteklemez inç
izin verilen e-posta adresi belirtir. Örneğin, şöyle söyleyemezsiniz:
break
bloğunun yalnızca bir loop
bloğu içinde olmasına izin verilir. Bağlantı
sadece o andaki bağlı olan iki bağlantıyı dikkate alır.
Aşağıdakileri dinlemek için etkinlik sistemini kullanarak bunu destekleyebilirsiniz engelleme taşıma etkinliklerini kontrol edip blokun yanlış konumlandırılıp konumlandırılmadığını kontrol edin.
Blockly.Blocks['custom_block'] = {
init: function() { }
onchange: function(e) {
if (this.workspace.isDragging()) return;
if (e.type !== Blockly.Events.BlockMove) return;
if (!this.getSurroundLoop()) this.outputConnection.disconnect();
}
loopTypes: new Set(); // Your valid *block types* (not connection checks).
getSurroundLoop: function () {
let block = this.getSurroundParent();
do {
if (loopTypes.has(block.type)) return block;
block = block.getSurroundParent();
} while (block);
return null;
},
}
Genel türler
Bu sistem, genel türlerin tanımlanmasını tek başına desteklememektedir. Örneğin, "Kimlik" oluşturamazsınız o "döndürülen" bloke her şey olduğu anlamına gelir.
ile eşleşmesi gerekir. Bunu yapmak için etkinlik sistemini dinleme etkinliklerini izlemelidir.
Blockly.Blocks['custom_block'] = {
init: function() { }
onchange: function(e) {
if (e.type !== Blockly.Events.BlockMove) return;
this.setOutput(
true, this.getInputTargetBlock()?.outputConnection.getCheck());
}
}
Ancak bağlı blok aynı zamanda genel ise bu özellik düzgün çalışmaz. Bu destek kaydı için iyi bir çözüm bulunmuyor.
Bağlantı kontrol araçları
Bu sistem kullanım alanınız için çalışmıyorsa bağlantı kontrolleri, özel bağlantı kontrol edici.
Örneğin, bazı temel işlemleri gerçekleştiren daha gelişmiş bir sistem oluşturmak sınırlamalarını önlemek isterseniz, bağlantı kontrol aracı.