Campos variáveis

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

Campo variável

Um bloco com o rótulo "variable:" 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 variável em bloco fechado

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

Criação

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 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 ele for nulo ou indefinido, um nome exclusivo será gerado.
  • Os tipos de variáveis precisam ser uma matriz de strings. Isso informa ao campo que tipos de variáveis ele pode conter (ou seja, que tipos de variáveis adicionar ao menu suspenso). Se ele for nulo ou indefinido, todos os tipos de variável serão aceitados 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 ele for definido, ele precisa ser incluído na matriz de tipos de variáveis. Se ele for nulo ou indefinido, esse valor será padrão para uma string vazia, o que significa que a variável inicial será tipada com flexibilidade.

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

Serialização

JSON

O JSON de um campo variável tem esta aparência:

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

Em que FIELDNAME é uma string que faz referência a 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 (opcionalmente) o tipo 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 variável tem esta aparência:

<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 referência.
  • 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 de variável do construtor.

Como criar um validador de variáveis

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

Confira um exemplo de 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;
}

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, o menu suspenso é definido como essa escolha. Quando
&quot;x&quot; é escolhido, o menu suspenso é definido como a escolha anterior, que é
&quot;Riker&quot;.