Campos variáveis

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

Campo "Variable"

Campo de variável com o editor aberto

Campo variável em bloco recolhido

com base em trends

Sem tipo

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 da variável aceita um nome de variável opcional, um validator opcional, uma matriz opcional de tipos de variáveis e um tipo padrão opcional.

  • O nome da variável deve ser uma string. Esse será o nome da variável inicial que o campo contém. Se o valor for nulo ou indefinido, um nome exclusivo será gerado.
  • Os tipos de variável 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 vão ser aceitos e adicionados à lista suspensa.
  • O tipo padrão precisa ser uma string. Ele será usado ao criar o modelo de variável inicial do campo. Se isso for definido, inclua-o na matriz de tipos de variáveis. Se for nulo ou indefinido, o valor padrão será uma string vazia, o que significa que a variável inicial será digitada de forma flexível.

→ Para ver mais informações sobre digitação restrita, 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 se refere a um campo de variável, e o valor é o ID da variável a que o campo faz referência.

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á variável disponível para referência.

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

XML

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

<field name="VARIABLE" id="QJD^+@[RVIwbLSZoDb:V" variabletype="">name</field>
  • O atributo name do nó contém uma string que faz referência a 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.

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

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