Campos variáveis

Um campo de variável armazena uma string como valor e uma string como texto. O valor é um ID de uma variável, enquanto o texto é o nome dela.

Campo de variável

Um bloco com o rótulo "variável:" e um campo suspenso com "x" selecionado.

Campo de variável com o editor aberto

O mesmo bloco com o menu suspenso aberto. O menu tem os itens "x", "Renomear variável..." e "Excluir a variável "x""

Campo de variável em um bloco recolhido

O mesmo bloco depois de ser recolhido. Ele tem o rótulo "variável: x" e uma borda direita irregular para mostrar que está recolhido.

Criação

Não tipado

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

Tipado

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

O construtor de variáveis recebe um nome de variável opcional, um validador opcional, uma matriz opcional de tipos de variáveis e um tipo padrão opcional.

  • O nome da variável precisa ser uma string. Esse será o nome da variável inicial que o campo contém. Se for nulo ou indefinido, um nome exclusivo será gerado.
  • Os tipos de variáveis precisam ser uma matriz de strings. Isso informa ao campo quais tipos de variáveis ele pode conter (ou seja, quais tipos de variáveis adicionar ao menu suspenso). Se for nulo ou indefinido, todos os tipos de variáveis serão aceitos (e adicionados ao menu suspenso).
  • O tipo padrão precisa ser uma string. Ele será usado ao criar o modelo de variável inicial do campo. Se definido, ele precisa ser incluído na matriz de tipos de variáveis. Se for nulo ou indefinido, esse valor será padrão para uma string vazia, o que significa que a variável inicial será tipada de forma flexível.

→ Para mais informações sobre a tipagem estrita, consulte Verificações de tipo.

Serialização

JSON

O JSON de um campo de variável é assim:

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

Em que FIELDNAME é uma string que referencia um campo de variável, e o valor é o ID da variável que o campo referencia.

Se você estiver usando esse campo na caixa de ferramentas, também poderá especificar o nome e o tipo (opcional) diretamente, já que não haverá nenhuma variável disponível para referência.

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

XML

O XML de um campo de variável é assim:

<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
  • O atributo name do nó contém uma string que referencia um campo de variável.
  • O atributo id do nó contém o ID da variável que o campo referencia.
  • O atributo variabletype do nó contém o tipo da variável. O variabletype segue as mesmas regras do parâmetro de tipo padrão do construtor.
  • O texto interno do nó é o nome da variável. O valor do texto interno segue as mesmas regras do parâmetro de nome da variável do construtor.

Como criar um validador de variáveis

O valor de um campo de variável é uma string. Portanto, todos os validadores precisam aceitar uma string e retornar uma string, null ou undefined.

Confira um exemplo de um validador que aceita apenas algumas variáveis predefinidas como opções. Essas variáveis precisam ser definidas com a Workspace.getVariableMap().createVariable função quando o espaço de trabalho é carregado.

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

Um GIF animado mostrando a função de validação em ação. Quando &quot;Picard&quot; ou &quot;Riker&quot; é escolhido no menu suspenso, ele é definido para essa opção. Quando &quot;x&quot; é escolhido, o menu suspenso é definido como a opção anterior, que é &quot;Riker&quot;.