4D v14.3Usar Diretivas de Compilador |
|||||||||||||||||||||||||||
|
4D v14.3
Usar Diretivas de Compilador
Usar Diretivas de Compilador
4D tem três categorias de variáveis:
Para mais informações sobre este ponto, consulte a seção Variáveis. Processos e variáveis interprocesso são estruturalmente o mesmo para o compilador. Desde que o compilador não pode determinar o processo no qual a variável será utilizada, variáveis do processo devem ser usadas com mais cuidado do que variáveis de processos. Todas as variáveis do processo são sistematicamente repetidas quando um novo processo começa. A variável de processo pode ter um valor diferente em cada processo, mas tem o mesmo tipo para todo o banco de dados. Todas as variáveis têm um tipo. Conforme descrito na seção Tipos de dados, existem 13 diferentes tipos de variáveis:
Para as variáveis de tipo Array, dispõem dos seguintes tipos:
Notas: Em modo interpretado, uma variável pode ter mais de um tipo de dados. Isso é possível porque o código é interpretado e não compilado. 4D interpreta cada instrução separadamente, e compreende o seu contexto. Quando você trabalha em um ambiente de compilação, a situação é diferente. Embora a interpretação é realizada linha por linha, o processo de compilação olha para um banco de dados na sua totalidade. A abordagem do compilador é a seguinte:
Se o compilador vem através do mesmo nome de variável e dois tipos de dados diferentes, não há nenhuma razão para favorecer qualquer um em particular. Em outras palavras, para um tipo de objeto e dar-lhe um endereço de memória, o compilador deve saber a identidade exata daquele objeto (ou seja, o seu nome e tipo de dados). O compilador determina o tamanho do tipo de dados. Para cada banco de dados compilado, o compilador cria um mapa que relaciona, para cada variável, o seu nome (ou identificador), a sua localização (ou endereço de memória), e o espaço que ocupa (indicado pelo seu tipo de dados). Este mapa é chamado de tabela de símbolos. Uma opção em Preferências permite que você escolha se deseja gerar esta tabela na forma de um arquivo durante a compilação. Se você quiser que o compilador verifique a digitação de suas variáveis ou digitá-las em si, é fácil colocar uma diretiva de compilador para essa finalidade. Você pode escolher entre duas possibilidades diferentes, dependendo do seu método de trabalho:
Diretivas do compilador são úteis em dois casos: Às vezes o compilador não pode determinar o tipo de dados de uma variável. Sempre que não pode fazer uma determinação, o compilador gera uma mensagem de erro apropriada.
no método A, Variable:=True no método B, Variable:="A lua é verde" Se o método A é compilado antes o método B, o compilador considera a declaração Variável: = "A lua é verde" como uma mudança de tipo de dados em uma variável anteriormente encontrada. O compilador avisa que uma redefinição de tipo ocorreu. Ele gera um erro para você corrigir. Na maioria dos casos, o problema pode ser corrigido por renomear a segunda ocorrência da variável.
Case of Neste caso, a ambigüidade aparece - quando os métodos de análise, o compilador irá inferir um tipo de dados reais para o objeto MyPopUp. Neste caso, é necessário declarar explicitamente o array no método de formulário ou em um método de compilador: Case of
- Ponteiros Var1:=5.2(1) Ponteiro :=->Var1(2) Embora (2) define o tipo de variável apontada pelo ponteiro, o tipo de Var2 não está determinada. Durante a compilação, o compilador pode reconhecer um ponteiro, mas não tem como saber que tipo de variável ele está apontando. Portanto, você não pode deduzir o tipo de dados Var2. Uma diretiva de compilador é necessária, por exemplo C_REAL (var2). - Comandos Multi-sintaxe - Comandos com parâmetros opcionais de diferentes tipos de dados - Métodos chamados via URLs Se todas as variáveis usadas no banco de dados são explicitamente declaradas, não é necessário para o compilador verificar a tipagem. Neste caso, você pode definir as opções para que o compilador execute somente a fase de tradução do método. Isso economiza pelo menos 50% em tempo de compilação. Você pode acelerar seus métodos usando diretivas de compilador. Para mais detalhes sobre este assunto, consulte a seção Dicas de otimização. Para dar um exemplo simples, suponha que você precisa incrementar um contador utilizando uma variável local. Se você não declarar a variável, o compilador assume que é um Real. Se você declará-la como um Longint, o banco de dados compilado irá executar com mais eficiência. Em um PC, por exemplo, um Real tem 8 bytes, mas se você digitar o contador como um Longint, utilizará apenas 4 bytes. Incrementar um contador de 8 bytes, obviamente, demora mais do que um incremento de 4 bytes. Directivas do compilador podem ser tratadas de duas maneiras diferentes, dependendo se você deseja ou não que o compilador atribua um tipo as suas variáveis. O compilador deve respeitar os critérios de identificação das variáveis.
V1:=True o compilador determina que a variável V1 é de tipo de dados Boolean. Da mesma forma, se você escrever: V2:="Esta é uma frase de exemplo" o compilador determina que V2 é uma variável do tipo texto. O compilador também é capaz de estabelecer o tipo de dados de uma variável em situações menos simples: V3:=V1 `V3 é do mesmo tipo que que V1 O compilador também determina o tipo de dados das variáveis de acordo com as chamadas para os comandos 4D e de acordo com seus métodos. Por exemplo, se você passar um parâmetro do tipo Booleano e um parâmetro do tipo Data para um método, o compilador atribui o tipo booleano e o tipo data para as variáveis locais $1 e $2 no método chamado. Quando o compilador determina o tipo de dados por inferência, salvo indicado o contrário nas preferências, nunca atribui os tipos de dados de limitação: Integer, Longint ou String. O tipo padrão atribuído pelo compilador é sempre o mais amplo possível. Por exemplo, se você escrever: Número:=4 compilador designa o tipo de dados Número Real, apesar de 4 ser apenas um número inteiro. Em outras palavras, o compilador não descarta a possibilidade de que, noutras circunstâncias, o valor da variável poderia ser 4,5. Se você já digitou suas variáveis e está certo que a sua foi coerente e completo, você pode explicitamente pedir ao compilador para não refazer este trabalho, utilizando as preferências de compilação. No caso de a sua escrita não ter sido completa e exaustiva, no momento da compilação, o compilador retornará um erro solicitando que você faça as modificações necessárias.
Eles são utilizados da seguinte forma: C_BOOLEAN(Var) Através de tais diretivas, você informa o compilador para criar uma variável Var que vai ser um booleano. Uma diretiva de compilador tem prioridade sobre as deduções feitas a partir de atribuições ou utilização. Se você não quiser que o compilador verifique a sua tipagem, você deve dar um código para identificar as directivas do compilador. Nota: A sintaxe para declarar esses parâmetros é a seguinte: Parâmetros particulares Esta declaração de parâmetro não pode ser gravada em um método Compiler. Exemplo: recebe seis parâmetros, $1 a $6, do tipo de dados Texto. No início do método de banco de dados, você deve escrever: C_TEXT ($1, $2, $3, $4, $5, $6) • Triggers O parâmetro $0 (Longint), que é o resultado de um trigger, é declarado pelo compilador se o parâmetro não foi explicitamente declarado antes. No entanto, se você quiser declará-lo, você deve fazê-lo no próprio trigger.Esta declaração de parâmetro não pode ser gravada em um método Compiler. • Objetos que aceitam o evento de formulário "On Drag Over" O parâmetro $0 (Longint), que é o resultado do evento de formulário "On Drag Over", é digitado pelo compilador se o parâmetro não foi explicitamente declarado. No entanto, se você quiser declará-lo, você deve fazê-lo no próprio método de objeto.Esta declaração de parâmetro não pode ser gravada em um método Compiler. Nota: O compilador não inicializar o parâmetro $0. Assim, logo que você usar o evento de formulário On Drag Over, você deve inicializar $0. Por exemplo: C_LONGINT($0) Diretivas do compilador eliminam qualquer ambiguidade sobre os tipos de dados. Apesar de que um certo rigor é necessário, isso não significa necessariamente que o compilador é intolerante de toda e qualquer inconsistência. C_INTEGER(vInteiro) O compilador não considera isso como um conflito do tipo de dados que impedem a compilação, ao contrário, o compilador simplesmente arredonda para o valor inteiro mais próximo (3 em vez de 2,5). |
PROPRIEDADES
Produto: 4D VER TAMBÉM
Detalhes de sintaxe ARTICLE USAGE
Manual de linguagem 4D ( 4D v14 R2) Inherited from : Usar Diretivas de Compilador ( 4D v11 SQL Release 6) |
|||||||||||||||||||||||||