Değişkenler önemli bir programlama kavramıdır. Blockly dinamik olarak destekler JavaScript ve Python gibi yazılan dilleri de içerir ve biraz ek çalışma güçlü bir şekilde yazılmış dilleri (veya statik yazılı dilleri) desteklemek için dilleri) ekleyebilirsiniz.
Buradan daha fazla bilgi edinebilirsiniz Dinamik ve statik yazılan diller hakkında daha fazla bilgi edinin.
Blok olarak, gösterilen dinamik açılır kutular olan değişken alanlarını sağlar Kullanıcının sağladığı değişkenlerin adları. Aşağıda bir örnek verilmiştir.
Varsayılan olarak Blockly, tüm türlerin bir değişkene atanmasına ve Blockly'nin sağladığı oluşturucular, dinamik olarak yazılan dillere yöneliktir. Şu durumda: kullanılan bir dil kullanıyorsanız, Blokly'yi yapılandırmak için şu:
- Değişken türünü ve engellemelerini belirtin, dahil olmak üzere tüm aktiviteleri ifade eder.
- Araç kutusunu yapılandırma kullanabilirsiniz.
- Oluşturucuları tanımlama değişkenleri ve blokları için de geçerlidir.
Yazılmamış Değişken Blokları
Bir değişkene erişmek ve bir değişkende değişiklik yapmak için en temel bloklar alıcıdır. yapı taşlarını oluşturur. Şimdi Blockly'nin sır perdesini aralayan alıcı ve setter bloklarının üzerinden sağlar.
JSON
// Block for variable getter.
{
"type": "variables_get",
"message0": "%1",
"args0": [
{ // Beginning of the field variable dropdown
"type": "field_variable",
"name": "VAR", // Static name of the field
"variable": "%{BKY_VARIABLES_DEFAULT_NAME}" // Given at runtime
} // End of the field variable dropdown
],
"output": null, // Null means the return value can be of any type
...
},
// Block for variable setter.
{
"type": "variables_set",
"message0": "%{BKY_VARIABLES_SET}",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": "%{BKY_VARIABLES_DEFAULT_NAME}"
},
{
"type": "input_value", // This expects an input of any type
"name": "VALUE"
}
],
...
}
JavaScript
// Block for variable getter.
Blockly.Blocks['variables_get'] = {
init: function() {
this.appendDummyInput()
.appendField(new Blockly.FieldVariable("VAR_NAME"), "FIELD_NAME");
this.setOutput(true, null);
...
}
};
// Block for variable setter.
Blockly.Blocks['variables_set'] = {
init: function() {
this.appendValueInput("NAME")
.setCheck(null)
.appendField("set")
.appendField(new Blockly.FieldVariable("VAR_NAME"), "FIELD_NAME")
.appendField("to");
this.setOutput(true, null);
...
}
};
Bu işlem aşağıdaki iki bloku oluşturur:
Dikkat edilmesi gereken önemli bir ayrıntı, değişkenin alıcı "çıkışı" değişkeninin null değerine ayarlanırsa döndürülen değer herhangi bir türde olabilir. Ayrıca, değişkenin setter'ın girişi herhangi bir kontrol belirtmiyor. Bunun sonucunda, değişken herhangi bir değer türünde uygulayabilirsiniz.
Yazılan Değişken Blokları
Tür kontrolünü zorunlu kılan alıcılar ve belirleyiciler ekleyebilirsiniz. Örneğin, "Panda" türünde bir değişken oluşturduğunuzdan, aşağıdaki tanımlar bir uygun türlerle belirlemektir.
JSON
// Block for Panda variable getter.
{
"type": "variables_get_panda",
"message0": "%1",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": "%{BKY_VARIABLES_DEFAULT_NAME}",
"variableTypes": ["Panda"], // Specifies what types to put in the dropdown
"defaultType": "Panda"
}
],
"output": "Panda", // Returns a value of "Panda"
...
},
// Block for Panda variable setter.
{
"type": "variables_set_panda",
"message0": "%{BKY_VARIABLES_SET}",
"args0": [
{
"type": "field_variable",
"name": "VAR",
"variable": "%{BKY_VARIABLES_DEFAULT_NAME}",
"variableTypes": ["Panda"],
"defaultType": "Panda"
},
{
"type": "input_value",
"name": "VALUE",
"check": "Panda" // Checks that the input value is of type "Panda"
}
],
"previousStatement": null,
"nextStatement": null,
...
}
JavaScript
// Block for variable getter.
Blockly.Blocks['variables_get_panda'] = {
init: function() {
this.appendDummyInput()
.appendField(new Blockly.FieldVariable(
"VAR_NAME", ['Panda'], 'Panda'), "FIELD_NAME");
this.setOutput(true, 'Panda');
...
}
};
// Block for variable setter.
Blockly.Blocks['variables_set_panda'] = {
init: function() {
this.appendValueInput("NAME")
.setCheck('Panda')
.appendField("set")
.appendField(new Blockly.FieldVariable(
"VAR_NAME", null, ['Panda'], 'Panda'), "FIELD_NAME")
.appendField("to");
this.setPreviousStatement(true, null);
this.setNextStatement(true, null);
...
}
};
Bu işlem, bir alıcı ve bir setter olmak üzere iki tür blok oluşturur. Yalnızca açılır menüleri
değişkenlerini görüntülüyoruz. Giriş ve çıkışları yalnızca
için de geçerli. Alanın defaultType
değeri bir olarak ayarlanmalıdır
variableTypes
dizisindeki değerlerden oluşur. Bu sırada defaultType
ayarlanmazsa
variableTypes
dizisi sağlanması bir hatanın verilmesine neden olur.
Varsayılan olarak, kullanıcıya hangi türün kullanıldığını gösteren görsel bir gösterge yoktur kullanılır. Değişken türlerini ayırt etmenin kolay bir yolu renk kullanmaktır.
Araç Kutusuna Değişken Ekleyin
Bu yeni değişken türünü kullanıcılarınız için yararlı hale getirmek amacıyla, nasıl kullanacağımızı konuştuk.
Yeni bir dinamik kategori oluşturma kullanabilirsiniz.
Yeni alıcılarınızı ve belirleyicilerinizi kategoriye ekleyin.
Değişken Oluştur Düğmesi
Ardından, kullanıcınızın değişken oluşturmak için bir yönteme ihtiyacı vardır. En basit yol, "Değişken Oluştur" button.
Düğmeyi oluştururken geri çağırma çağrısı yapın:
Blockly.Variables.createVariableButtonHandler(button.getTargetWorkspace(), null, 'panda');
ve Panda türünde bir değişken oluşturulacaktır!
Kullanıcıların birden çok türde değişken oluşturmasına izin vermenin en kolay yolu bir "oluştur" düğme (ör. Dize Değişkeni Oluştur, Sayı Oluştur Değişken, Panda Değişkeni Oluşturma).
İki veya üçten fazla değişken türünüz varsa, hızlı bir şekilde çok fazla düğme var. Bu durumda, @blockly/plugin-typed-variable-modal kullanıcıların istedikleri değişken türünü seçebilecekleri bir pop-up görüntülemesi.
Jeneratörleri Tanımlayın
Son olarak, blok kodu oluşturucuları tanımlamanız gerekir. oluşturmanız gerekir. Değişkenler listesine doğrudan erişebilirsiniz. veya tüm türlerdeki tüm değişkenleri almak için Blockly.Workspace.getAllVariables() ile Blockly.Workspace.getVariablesOfType() ile belirli bir türdeki tüm değişkenleri alabilirsiniz.