4D v14.3Guia Digitação |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
Guia Digitação
Guia Digitação
Esta seção descreve as principais causas de conflitos de digitação nas variáveis, bem como maneiras de evitá-los. Conflitos de tipo de dados simples podem ser resumidas da seguinte forma:
Os conflito de tipo de dados mais simples é aquele que resulta de uma única variável que designa dois objetos diferentes. Suponha que, em um aplicativo, você escreva: Variavel:=5 e que em outro lugar, na mesma aplicação, você escreva: Variavel:=True Isso gera um conflito de tipo de dados. O problema pode ser resolvido renomeando uma das variáveis. Suponha que, em um aplicativo, você escreva: Variable:=5 e que em outro lugar, na mesma aplicação, você escreva: C_BOOLEAN(Variable) Desde que o compilador verifique as primeiras diretrizes, a variável será do tipo booleano, mas quando encontrar a declaração: Variable:=5 detecta um conflito de tipo de dados. Você pode resolver o problema, renomeando a variável ou modificando a diretiva de compilador. Usando variáveis de tipos diferentes de dados em uma expressão cria inconsistências. O compilador aponta incompatibilidades. Aqui está um exemplo simples: vBool:=True `O compilador infere que vBoolean é o tipo de dados Booleano
Algumas funções retornam variáveis de um tipo de dado muito preciso. Atribuir o resultado de uma dessas variáveis para uma variável já digitada causará um conflito de tipo de dados se você não for cuidadoso. IdentNo:=Request("Número de identificação") `IdentNo é de tipo Texto Neste exemplo, você cria um tipo de conflito na terceira linha. A solução consiste em controlar o comportamento da variável. Em alguns casos, você deve criar uma variável intermediária que usa um nome diferente. Em outros casos, como este, o método pode ser estruturado de forma diferente: Declarando a mesma variável através de duas diretivas do compilador constitui uma redigitação. Se, no mesmo banco de dados, você escrever: o compilador detecta o conflito e relata um erro no arquivo de erro. Normalmente, você pode resolver o problema renomeando uma das variáveis. Tenha em mente que um conflito de tipo de dados podem surgir devido à utilização de C_STRING se você modificar o tamanho máximo da string. Assim, se você escrever: o compilador identifica um conflito, porque ele deve fornecer uma localização adequada de tamanho quando declarar variáveis String. C_STRING(6;Cadeia) Nota: Se tiver escrito C_STRING (7; String) duas vezes, ou seja: o compilador, no entanto, aceita as diretivas, a segunda diretriz é simplesmente redundante. Conflitos de tipo de dados envolvendo variáveis locais são idênticas às do inter ou variáveis do processo. A única diferença é que deve haver coerência somente dentro de um método especificado. $Temp:="Flores" e, em seguida, $Temp:=5 No entanto, você pode escrever: $Temp:="Flores" no método M1, e: $Temp:=5 no método M2, pois o escopo de variáveis locais é o método em si e não o banco de dados inteiro. Conflitos sobre um array nunca estão relacionados ao tamanho. Tal como em bancos de dados não compilado, arrays são gerenciados dinamicamente. O tamanho de um aray pode variar ao longo de métodos, e você não precisa declarar o tamanho máximo para um array. Você deve seguir estas orientações, ao escrever uma base de dados destinada para a compilação:
Se você declarar um array como um array de inteiros, deve permanecer um array de inteiros em todo o banco de dados. Ela nunca pode conter, por exemplo, elementos do tipo Boolean. ARRAY INTEGER(MeuArray;5) o compilador não pode dar um tipo a MeuArray. Em um banco de dados não compilado, você pode alterar o número de dimensões em um array. Quando o compilador cria a tabela de símbolos, arrays unidimensionais e arrays bidimensionais são geridos de forma diferente. ARRAY INTEGER(MeuArray1;10) No entanto, você pode escrever as instruções a seguir na mesma aplicação: ARRAY INTEGER(MeuArray1;10) O número de dimensões em um array não pode ser alterado em um banco de dados. No entanto, você pode alterar o tamanho de um array. Você pode redimensionar um array de um array bidimensional e escrever: ARRAY BOOLEAN(MeuArray;5) Nota: Um array bidimensional é, na verdade, um conjunto de vários arrays unidimensionais. Para mais informações, consulte a seção de Arrays de duas dimensões. Arrays de string seguem as mesmas regras de string sfixas, pelas mesmas razões. ARRAY STRING(5;MeuArray;10) o compilador detecta um conflito de comprimento. A solução é simples: declarar o tamanho máximo da string. O compilador automaticamente manipula seqüências de comprimento mais curto. Ao usar comandos como COPY ARRAY, LIST TO ARRAY, ARRAY TO LIST, SELECTION TO ARRAY, SELECTION RANGE TO ARRAY, ARRAY TO SELECTION, ou DISTINCT VALUES, você pode mudar, voluntariamente ou não, os tipos de dados de elementos, a número de dimensões, ou, em uma matriz de String, o comprimento da string. Você vai, assim, encontrar-se em uma das três situações mencionadas anteriormente. O compilador gera uma mensagem de erro, a correção requerida é geralmente bastante óbvia. Exemplos de redigitação implícita de array são fornecidos na seção Detalhes de sintaxe. Se você deseja compilar um banco de dados que utiliza arrays locais (arrays visíveis apenas pelos métodos que os criou), você deve declará-los explicitamente em 4D antes de usá-los. ARRAY INTEGER($MeuArray;10) Variáveis criadas em um formulário (por exemplo, botões, caixas de lista suspensa, e assim por diante) são sempre variáveis de processo ou interprocessos. As seguintes variáveis de formulário são tipadas como Real por padrão: Nota: A Régua, Dial e variáveis de formulário Termômetro são sempre tipadas como reais, mesmo se você escolher inteiro longo como o botão padrão em Preferências. Para uma dessas variáveis, o único conflito de tipo de dados que pode surgir seria se o nome de uma variável fosse idêntico aos de um outro localizado em outro lugar no banco de dados. Neste caso, renomeie a segunda variável. A área do gráfico é automaticamente os dados do tipo de gráfico (Longint). Esta variável não cria um conflito de tipo de dados. Para uma variável do tipo de gráfico, o único conflito de tipo de dados que pode surgir seria se o nome de uma variável fosse idêntico aos de um outro localizado em outro lugar no banco de dados. Neste caso, renomeie a segunda variável. Um plug-in é sempre uma área Longint. Nunca pode haver um conflito de tipo de dados. Estas variáveis são dos seguintes tipos: Estas variáveis estão divididas em duas categorias:
Quando você usa ponteiros em seu banco de dados, você aproveitar uma ferramenta 4D poderosa e versátil. O compilador preserva todas as vantagens de ponteiros. Variável:=5.3 Neste caso, o ponteiro dereferenced é uma variável real. Ao atribuir-lhe um valor booleano, você pode criar um conflito de tipo de dados. Se você precisar usar ponteiros para fins diferentes no mesmo método, certifique-se que os ponteiros são definidos: Um ponteiro é sempre definido em relação ao objeto a que se refere. É por isso que o compilador não pode detectar conflitos de tipo de dados criado por ponteiros. Em caso de conflito, você não receberá nenhuma mensagem de erro quando você estiver na fase de digitação ou em fase de compilação. Durante a compilação, o compilador analisa as definições dos comandos de plug-in usados no banco de dados, ou seja, o número e tipo de parâmetros desses comandos. Não há perigo de confusão ao nível de digitação se as chamadas são consistentes com a declaração do método. O compilador não duplica esses arquivos, mas analisa-os para determinar a declaração correta de suas rotinas. Alguns plug-ins, por exemplo, 4D Write, executam comandos que implicitamente chamam comandos 4D. Tomemos o exemplo de 4D Write. A sintaxe para do comando WR ON EVENT é:
Para o compilador levar em consideração esses parâmetros, você deve se certificar de que eles tenham sido digitados, ou por uma diretiva de compilador, ou por seu uso no método. Se eles têm sido utilizados para fins processuais, o uso tem de ser explícito o bastante para ser capaz de deduzir o tipo com clareza. 4D pode ser usado para criar e trabalhar com componentes. Um componente 4D é um conjunto de objetos 4D que representa uma ou mais funcionalidades e agrupados em um arquivo de estrutura (o chamado banco de dados do array), que pode ser instalado em bancos de dados diferentes (chamados de bases de dados do host). Um banco de dados host executando no modo interpretado pode usar componentes interpretados ou compilados indiferentemente. É possível instalar os dois componentes interpretados e compilados no banco de dados de um mesmo host. Por outro lado, um banco de dados do host em execução no modo compilado não pode usar componentes interpretados. Neste caso, apenas componentes compilados podem ser usados. Um banco de dados host interpretado contendo componentes interpretados podem ser compilados se não chamar quaisquer métodos do componente interpretado. Se este não for o caso, uma caixa de diálogo de aviso aparece quando você tenta compilar a aplicação e a compilação não é possível. Um conflito de nomes pode ocorrer quando um método de projeto compartilhado do componente tem o mesmo nome que um método de projeto do banco de dados do host. Neste caso, quando o código é executado no contexto do banco de dados do host, o método do banco de dados do host é chamado. Isso significa que é possível "mascarar" o método do componente com um método personalizado (por exemplo, para obter uma funcionalidade diferente). Quando o código é executado no contexto do componente, o método do componente é chamado. Esta máscara será indicada por um aviso no caso da elaboração do banco de dados do host. Se dois componentes compartilham métodos com o mesmo nome, um erro é gerado quando o banco de dados do host é compilado. Para obter mais informações sobre componentes, consulte o manual de referência de desenho. A manipulação de variáveis locais segue todas as regras que já foram indicadas. Tal como acontece com todas as outras variáveis, seus tipos de dados não pode ser alterado quando o método é executado. Nesta seção, vamos examinar dois casos que podem levar a conflitos de tipo de dados:
Uma variável não pode ser digitada novamente. No entanto, é possível usar um ponteiro para se referir a variáveis de diferentes tipos de dados. Existem dois métodos para realizar esta operação:
$Tamaño:=Size of array($1->) No método anterior, o tipo de dados $0 muda de acordo com o valor de $1 e, portanto, não é compatível com o compilador.
$Tamaño:=Size of array($1->) VarText:=String(8+($Tamanho*4))+("+Soma dos comprimentos dos text
os" Aqui estão as principais diferenças entre as duas funções: O compilador gera o poder ea versatilidade de indireção parâmetro. No modo interpretado, 4D oferece-lhe uma mão com os números e tipos de dados dos parâmetros. Você mantém essa liberdade no modo compilado, desde que você não introduza conflitos de tipo de dados e que você não use mais parâmetros que você passou no método de chamada. Como exemplo, considere uma função que agrega valores e retorna a soma formatada de acordo com um formato que é passado como um parâmetro. Cada vez que este método é chamado, o número de valores a serem adicionados pode variar. Temos de passar os valores como parâmetros para o método e o formato em forma de uma cadeia de caracteres. O número de valores pode variar de chamada para chamada. Resultado:=MinhaSoma("##0.00";125,2;33,5;24) Neste caso, o método de chamada receberá a string "182,70", que é a soma dos números, formatada como especificado. Os parâmetros da função devem ser passados na ordem correta: primeiro o formato e depois os valores. Aqui está a função, chamada MySum: $Sum:=0 Esta função pode agora ser chamada de várias maneiras: Resultado:=MySum("##0.00";125,2;33,5;24) Tal como acontece com outras variáveis locais, não é necessário declarar parâmetros genéricos por diretiva do compilador. Quando necessário (nos casos de ambiguidade ou de otimização), é feita usando a seguinte sintaxe: C_INTEGER(${4}) Este comando significa que todos os parâmetros a partir do quarto (incluído) serão abordados com indireção e serão do tipo de dados Integer. $1, $2 e $3 podem ser de qualquer tipo de dados. No entanto, se você usar $2 por indireção, o tipo de dados utilizado será do tipo genérico. Assim, serão do tipo de dados Integer, mesmo que para você fosse, por exemplo, do tipo de dados real. Nota: O compilador usa este comando na fase de digitação. O número da declaração deve ser uma constante e não uma variável. Algumas variáveis 4D e constantes são atribuídas a um tipo de dados e a uma identidade com o compilador. Portanto, você não pode criar uma nova variável, método, função ou plug-in de comando usando qualquer uma dessas variáveis ou nomes de constantes. Você pode testar seus valores e utilizá-los como você faz em modo interpretado. Aqui está uma lista completa de 4D com os seus tipos de dados.
Quando você cria uma coluna calculada em um relatório, 4D cria automaticamente uma variável C1 para a primeira, C2 primeiro para a segunda, C3 e assim por diante. Isso é feito de forma transparente. Uma lista completa das constantes pré-definidas em 4D pode ser encontrada usando a Lista de temas constantes. Constantes 4D também são exibidas no Explorer em modo Desenho. |
PROPRIEDADES
Produto: 4D VER TAMBÉM
Detalhes de sintaxe ARTICLE USAGE
Manual de linguagem 4D ( 4D v12.4) Parent of : Guia de declaração ( 4D v11 SQL Release 6) |
||||||||||||||||||||||||||||||||||||||||||||||||||||