Pola zmiennych

Pole zmienne przechowuje ciąg znaków jako wartość i ciąg znaków jako tekst. Wartość to identyfikator zmiennej, a tekst to jej nazwa.

Pole zmienne

Blok z etykietą „zmienna:” i menu z wybraną opcją „x”.

Pole zmiennej z otwartym edytorem

Ten sam blok z otwartym menu Menu zawiera elementy „x”, „Zmień nazwę zmiennej…” i „Usuń zmienną „x””.

Pole zmienne w zwiniętym bloku

Ten sam blok po zwięciu. Ma etykietę „zmienna: x” i zaokrągloną prawą krawędź, co oznacza, że jest zwinięty.

na podstawie trendów

Bez typu

JSON

{
  "type": "example_variable_untyped",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_untyped'] = {
  init: function() {
    this.appendDummyInput()
        .appendField('variable:')
        .appendField(new Blockly.FieldVariable('x'), 'FIELDNAME');
  }
};

Wpisany

JSON

{
  "type": "example_variable_typed",
  "message0": "variable: %1",
  "args0": [
    {
      "type": "field_variable",
      "name": "FIELDNAME",
      "variable": "x",
      "variableTypes": ["Number", "String"],
      "defaultType": "Number"
    }
  ]
}

JavaScript

Blockly.Blocks['example_variable_typed'] = {
  init: function() {
    this.appendDummyInput()
      .appendField('variable:')
      .appendField(new Blockly.FieldVariable(
          'X',
          null,
          ['Number', 'String'],
          'Number'
      ), 'FIELDNAME');
  }
};

Konstruktor zmiennej przyjmuje opcjonalną nazwę zmiennej, opcjonalny walidator, opcjonalny tablicowy zbiór typów zmiennych i opcjonalny typ domyślny.

  • Nazwa zmiennej powinna być ciągiem znaków. Będzie to nazwa zmiennej początkowej przechowywanej w polu. Jeśli jest ona pusta lub niezdefiniowana, zostanie wygenerowana unikalna nazwa.
  • Typy zmiennych powinny być tablicą ciągów znaków. To pole określa, jakie typy zmiennych może zawierać (czyli jakie typy zmiennych należy dodać do menu). Jeśli jest ona pusta lub niezdefiniowana, wszystkie typy zmiennych będą akceptowane (i dodawane do menu).
  • Domyślny typ powinien być ciągiem znaków. Zostanie on użyty podczas tworzenia początkowego modelu zmiennej pola. Jeśli jest zdefiniowany, należy go uwzględnić w tablicy typów zmiennych. Jeśli jest ona null lub nieokreślona, domyślnie przyjmuje postać pustego ciągu znaków, co oznacza, że początkowa zmienna będzie miała typ elastyczny.

→ Więcej informacji o ścisłym typowaniu znajdziesz w artykule Sprawdzanie typów.

Publikacja w odcinkach

JSON

Kod JSON dla pola zmiennego wygląda tak:

{
  "fields": {
    "FIELDNAME": {
      "id": "QJD^+@[RVIwbLSZoDb:V"
    }
  }
}

Gdzie FIELDNAME to ciąg znaków odwołujący się do pola zmiennego, a wartość to identyfikator zmiennej, do której odwołuje się pole.

Jeśli używasz tego pola w skrzynce narzędzi, możesz też bezpośrednio podać nazwę i (opcjonalnie) typ, ponieważ nie będzie dostępnej zmiennej do odwołania.

{
  "fields": {
    "FIELDNAME": {
      "name": "my_variable",
      "type": "string"
    }
  }
}

XML

Kod XML pola zmiennego wygląda tak:

<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
  • Atrybut name węzła zawiera ciąg znaków odwołujący się do pola zmiennej.
  • Atrybut id węzła zawiera identyfikator zmiennej, do której odwołuje się pole.
  • Atrybut variabletype węzła zawiera typ zmiennej. Parametr variabletype podlega tym samym regułom co domyślny parametr typu konstruktora.
  • Tekst wewnątrz węzła to nazwa zmiennej. Wartość tekstu wewnętrznego podlega tym samym regułom co parametr nazwy zmiennej konstruktora.

Tworzenie weryfikatora zmiennej

Wartość pola zmiennego to ciąg znaków, więc wszystkie walidatory muszą akceptować ciąg znaków i zwracać ciąg znaków, null lub undefined.

Oto przykład walidatora, który akceptuje jako opcje tylko niektóre zdefiniowane wstępnie zmienne. Te zmienne trzeba zdefiniować za pomocą funkcji Workspace.createVariable podczas wczytywania obszaru roboczego.

function(newValue) {
  var validIds = ['Worf', 'Riker', 'Picard'];
  if (validIds.indexOf(newValue) == -1) {
    return null;
  }
  return newValue;
}

Animowany GIF pokazujący działanie funkcji sprawdzania poprawności. Gdy w menu zostanie wybrana opcja „Picard” lub „Riker”, menu zostanie ustawione na tę opcję. Gdy wybierzesz „x”, menu zostanie ustawione na poprzednią opcję, czyli „Riker”.