4D v16.3

Variáveis

Página Inicial

 
4D v16.3
Variáveis

Variáveis  


 

 

Dados em 4D são armazenados de duas maneiras fundamentalmente diferentes. Campos armazenam dados permanentemente no disco; variáveis armazenam dados temporariamente na memória.

Quando você cria seu banco de dados 4D, você pode especificar os nomes e tipos de campos que você deseja usar. As variáveis são a mesma coisa, você também lhes atribui nomes e tipos diferentes.

Os tipos de variáveis a seguir correspondem a cada um dos tipos de dados:

  • Alfa (*) ou texto: string alfanumérico de até 2 GB de texto
  • Inteiro: número inteiro entre -32768 y 32767
  • Inteiro longo: número inteiro entre -2^31 e (2^31)-1
  • Real: número real entre ±1.7 e ±308 (13 cifras significativas)
  • Data: data entre 1/1/100 e 31/12/32767
  • Time: hora entre 00:00:00 e 596000:00:00 (segundos desde a meia noite)
  • Booleano: Verdadeiro ou Falso
  • Imagem: qualquer imagem Windows ou Macintosh
  • Objeto: um conjunto de pares "propriedade/valor" estruturados em um formato do tipo JSON
  • BLOB (Objeto Binario Longo): Séries de bytes de até 2 GB de tamanho
  • Ponteiro: um ponteiro para um tabela, campo, variável, Array, ou elemento de Array

(*) Em modo Unicode, os tipo de variável alfa e texto são idênticos. No modo não-Unicode (modo de compatibilidade), um Alfa é uma sequência fixa alfanumérica de até 255 caracteres.

Você pode exibir variáveis (exceto Ponteiros e BLOB) na tela, inserir dados neles, e imprimi-los em relatórios. Nestes aspectos, variáveis agem exatamente como os campos e os mesmos controles internos estão disponíveis quando você criá-los:

  • Formatos de saída
  • Validação de dados, tais como filtros de entrada e valores padrões
  • Filtros de caracteres
  • Listas de seleção (listas hierárquicas)
  • Valores editáveis e não editáveis

As variáveis também podem servir para:

  • controlar botões (botões, caixas de seleção, botões de rádio, botões 3D, e assim por diante)
  • controlar termômetros, réguas e dials
  • controlar áreas de rolagem, menus pop-up, e listas suspensas
  • controlar listas e menus hierárquicos
  • controlar as grades de botões, guias, botões de imagem, etc.
  • visualizar os resultados de cálculos que não necessitam ser guardados.

Você pode criar variáveis de simplesmente usá-las, você não precisa necessariamente defini-las como você faz com os campos. Por exemplo, se você quer uma variável que irá armazenar a data atual mais 30 dias, você escreve:

 MinhaData:=Current date+30

4D cria MinhaData e mantém a data que você precisa. A linha de código lê "MyDate obtém a data atual mais 30 dias." Você pode agora usar MinhaData sempre que você precisar em seu banco de dados. Por exemplo, você pode precisar armazenar a variável data em um campo do mesmo tipo:

 [MinhaTabela]MeuCampo:=MinhaData

No entanto, é recomendado uma variável ser definida explicitamente como um certo tipo. Para obter mais informações sobre como digitar as variáveis de um banco de dados, consulte a seção Comandos do Compilador.

Os dados podem ser colocados e copiados de variáveis. Colocar os dados em uma variável é o mesmo que atribuir os dados à variável, e é feito com o operador de atribuição (:=). O operador de atribuição também é usado para atribuir dados aos campos.

O operador de atribuição é a principal maneira de criar uma variável e colocar os dados nela. Você escreve o nome da variável que deseja criar no lado esquerdo do operador de atribuição. Por exemplo:

 MeuNúmero:=3

cria a variável MeuNumero e coloca o número 3 nela. Se MeuNumero já existe, então o número 3 é apenas colocado nela.

Naturalmente, as variáveis não seria muito úteis se você não pudesse obter os dados das mesmas. Mais uma vez, use o operador de atribuição. Se você precisa colocar o valor do MeuNumero em um campo chamado [Produtos]Tamanho, você escreveria MeuNumero no lado direito do operador de atribuição:

 

 [Produtos]Tamanho:=MeuNumero

Neste caso, [Produtos]Tamanho seria igual a 3. Este exemplo é bastante simples, mas ilustra o caminho fundamental no qual os dados são transferidos de um lugar para outro usando a linguagem.

Importante: Tenha cuidado para não confundir o operador de atribuição (: =) com o operador de comparação igual (=). Atribuição e comparação são operações muito diferentes. Para mais informações sobre os operadores de comparação, consulte a seção Operadores.

Você pode criar três tipos de variáveis: variáveis locais, variáveis processo, e variáveis interprocesso. A diferença entre os três tipos de variáveis é o seu alcance, ou os objetos aos quais eles estão disponíveis.

Uma variável local é, como seu nome implica, local de um método acessível apenas dentro do método no qual ela foi criado e não acessível fora desse método. Sendo local de um método é formalmente referido como uma variável "de escopo local". Variáveis locais são usadas para restringir uma variável a fim de que ela funciona apenas dentro do método.

Você pode querer usar uma variável local para:

  • Evitar conflitos com nomes de outras variáveis
  • Usar dados temporariamente
  • Reduzir o número de variáveis do processo

O nome de uma variável local sempre começa com um cifrão ($) e pode conter até 31 caracteres. Se você digitar um nome mais longo, 4D o trunca para o tamanho adequado.

Quando você está trabalhando em um banco de dados com muitos métodos e variáveis, muitas vezes você pode achar que precisa usar uma única variável dentro do método no qual você está trabalhando. Você pode criar e usar uma variável local do método, sem se preocupar se você tiver usado o mesmo nome de variável em outro lugar.

Freqüentemente, em um banco de dados, pequenos pedaços de informação do usuário são necessários. O comando Request pode obter essa informação. Ele exibe uma caixa de diálogo com uma mensagem pedindo ao usuário uma resposta. Quando o usuário digita a resposta, o comando retorna as informações que o usuário inseriu. Você normalmente não precisa manter esta informação em seus métodos por muito tempo. Esta é uma forma típica para usar uma variável local. Aqui está um exemplo:

 $vsID:=Request("Digite o seu ID:")
 If(OK=1)
    QUERY([Pessoas];[Pessoas]ID =$vsID)
 End if
Esse método simplesmente pede que o usuário digite um ID. Ela coloca a resposta em uma variável local, $vsID, e depois procura o ID que o usuário inseriu. Quando terminar esse método, a variável $ vsID local é apagada da memória. Isso é bom, porque a variável é necessária apenas uma vez e somente neste método.

Uma variável de processo só está disponível dentro de um processo. Ela é acessível ao método de processo e qualquer outro método chamado de dentro do processo.

A variável de processo não tem um prefixo antes do seu nome. Um nome de variável de processo pode conter até 31 caracteres.

No modo interpretado, as variáveis são mantidas dinamicamente, elas são criados e apagadas da memória "on the fly". No modo Compilado, todos os processos que você criar (usuário processos) compartilham a mesma definição de variáveis de processo, mas cada processo tem uma instância diferente para cada variável. Por exemplo, a variável MinhaVariavel é uma variável no processo P_1 e outra no processo P_2.

Um processo pode "peek e poke" variáveis de processo de outro processo usando os comandos GET PROCESS VARIABLE e SET PROCESS VARIABLE. É boa prática de programação para restringir o uso destes comandos para a situação para a qual foram adicionados a 4D:

  • Comunicação entre processos em locais específicos ou seu código
  • Manipulação de arrastar e soltar entre processos 
  • No cliente / servidor, a comunicação entre processos em máquinas cliente e a execução de procedimentos armazenados nas máquinas do servidor.

Para obter mais informações, consulte a seção Processos e a descrição desses comandos.

Variáveis Interprocesso estão disponíveis em todo o banco de dados e são compartilhadas por todos os processos. Elas são utilizados principalmente para compartilhar informações entre processos.

O nome de uma variável interprocess sempre começa com os símbolos (<>) - um sinal de "menor" seguido por um sinal de "maior" seguido por 31 caracteres.

Nota: Esta sintaxe pode ser usado tanto em Windows e Macintosh. Além disso, somente no Macintosh, você pode usar o diamante (Option-Shift-V no teclado americano).

Em máquinas Cliente/Servidor, cada máquina (Máquinas Cliente e Máquinas Servidor) compartilham a mesma definição de variáveis interprocesso, mas cada máquina tem uma instância diferente para cada variável.

No editor de formulário, cada objeto ativo - botão, botão de rádio, caixa de seleção, área de rolagem, barra de medição, e assim por diante - está identificado por um nome de objeto e se associa automaticamente a uma variável  (ou uma expressão). Como padrão, a variável não define a criação do objeto: será criada dinamicamente ao carregar o formulário (ver abaixo). Pode, se quiser, nomear a variável na lista de propriedades com o fim de criá-la. Por exemplo, se você criar um botão denominado MeuBotao, uma variável chamada MeuBotao também é criada. Note que este nome de variável não é a etiqueta para o botão, é o nome do botão.

As variáveis de objeto de formulário lhe permitem controlar e monitorar os objetos. Por exemplo, quando um botão é clicado, a variável é definida como 1, em todas as outras vezes, ela é 0. A variável associada a um dial permite ser lida e permite alterar a configuração atual. Por exemplo, se você arrastar um dial a um novo cenário, o valor da variável muda para refletir a nova configuração. Da mesma forma, se um método altera o valor da variável, o contador é redesenhado para mostrar o novo valor.

Para obter mais informações sobre variáveis e formulários, consulte o Manual de Referência 4D, bem como a seção Eventos de formulário.

Você pode deixar que 4D crie variáveis associadas aos objetos de formulário (botões, variáveis editáveis, caixas de seleção, etc) de forma dinâmica e de acordo com suas necessidades. Para isso, basta deixar o campo "nome da variável" em branco na lista de propriedades para o objeto:



Quando uma variável não for chamada, quando o formulário é carregado, 4D cria uma nova variável para o objeto, com um nome calculado que é único no espaço das variáveis de processo do interpretador (o que significa que este mecanismo pode ser usado até mesmo em modo compilado). Esta variável temporária será destruída quando o formulário for fechado. 

Para que este princípio trabalhe em modo compilado, é imperativo que as variáveis dinâmicas sejam explicitamente definidas: Há dois formas de fazer isto:

  • definir o tipo via no menu "tipo de variável" da lista de propriedades.
  • Nota: Quando a variável for nomeada, o menu "Tipo de Variável" não define realmente a variável mas simplesmente permite a atualização das opções da lista de Propriedades a ser atualizada (exceto por variáveis de imagem). Para definir uma variável nomeada, é necessário usar os comandos do tema Compilador.
  • pode utilizar um código de utilização específico durante a carga do formulário, utilizando por exemplo o comando VARIABLE TO VARIABLE:
     If(Form event=On Load)
        C_TEXT($init)
        $Ptr_object:=OBJECT Get pointer(Object named;"Comentários")
        $init:=""
        VARIABLE TO VARIABLE(Current process;$Ptr_object->;$init)
     End if

Nota: É definida uma variável dinâmica, selecione o valor Nenhum no menu "Tipo de variável" e não utilize código de inicialização, um erro de digitação será devolvido pelo compilador.

No código 4D, variáveis dinâmicas podem ser acessadas usando um ponteiro obtido com o comando OBJECT Get pointer. Por exemplo:

  // atribui a hora  12:00:00 à variável para o objeto "hinicio"
 $p :=OBJECT Get pointer(Object named;"hinicio")
 $p->:=?12:00:00?

Há duas vantagens com esse mecanismo:

  • Por um lado, permite o desenvolvimento de componentes de tipo "subformulário" que podem ser usados diversas vezes no mesmo formulário host. Por exemplo no caso de um formulário datepicker que for inserido duas vezes num formulário local para estabelecer uma data de início e fim. Esse sbuformulário usará objetos para escolher a data do mês e ano. Será necessário que esses objetos trabalhem com diferentes variáveis para a data de início e fim. Deixar 4D criar essa variável com um número único é uma maneira de resolver essa dificuldade.
  • Por outro lado, pode ser usado para limitar o uso de memória. Na verdade, objetos de formulário apenas trabalham com variáveis processo ou inter-processo. Entretanto, em modo compilado, uma instância de cada variável de processo é criada em todos os processos, mesmo os processos de servidor. Essa instância usa memória, mesmo quando o formulário não está sendo usado durante a sessão. Por isso, deixar 4D criar variáveis dinamicamente quando carrega os formulários pode economizar memória.
Nota: Quando não houver nome de variável, o nome de objeto é mostrado entre aspas no formulário de editor (quando o objeto, por padrão, exibe um nome de variável).

4D mantém uma série de variáveis chamadas de variáveis de sistema. Estas variáveis permitem-lhe controlar várias operações. Variáveis do sistema são as variáveis de processo, acessíveis apenas a partir de um processo.

A variável de sistema mais importante é a variável de sistema OK. Como o próprio nome indica, lhe diz se está tudo OK em um processo em particular. O registro foi salvo? A operação de importação foi concluída? Será que o usuário clicou no botão OK? A variável de sistema OK é definida como 1 quando uma tarefa é concluída com êxito, e 0 quando não é.

Para mais informações sobre variáveis de sistema, consulte a seção Variáveis de Sistema.



Ver também 

Arrays
Constantes
Controle de fluxo
Convenções
Métodos
Operadores
Ponteiros
Tipos de dados

 
PROPRIEDADES 

Produto: 4D
Tema: Apresentação da linguagem

 
HISTÓRIA 

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)