Saltar para o conteúdo principal
Versão: v18

Identificadores

This section describes the conventions and rules for naming various elements in the 4D language (variables, tables, objects, forms, etc.).

Regras básicas

As regras seguintes aplicam-se a todas as estruturas 4D.

  • Um nome deve começar por um caractere alfabético, um subscrito ou um sinal de dólar ("$") (lembre que um sinal de dólar pode denotar um elemento local, ver abaixo).
  • Depois disso, o nome pode incluir caracteres alfabéticos, numéricos, o caractere espaço e o caractere de sublinhado/traço baixo ("_") .
  • Pontos (".") and brackets ("[ ]") are not allowed in table, field, method, or variable names.
  • Não são permitidas vírgulas, barras, aspas e dois pontos.
  • Characters reserved for use as operators, such as * and +, are not allowed.
  • Do not use reserved names, i.e. 4D command names (Date, Time, etc), keywords (If, For, etc.), and constants.
  • Os espaços finais são ignorados.

Regras adicionais para propriedades de objetos e nomes ORDA

  • Não são permitidos caracteres de espaço.
  • Pontos (".") e parênteses ("[ ]") não são permitidos.
  • Os nomes são sensíveis a maiúsculas e minúsculas.

Regras adicionais para SQL

  • Somente os caracteres _0123456789abcdefghijklmnopqrstuvwxyz são aceitos
  • Os nomes não devem incluir nenhuma palavra-chave SQL (comando, atributo, etc.).

Note: The "SQL" area of the Inspector in the Structure editor automatically indicates any unauthorized characters in the name of a table or field.

Tabelas

Uma tabela se designa colocando seu nome entre parênteses: [...]. O nome de uma tabela pode conter até 31 caracteres.

Exemplos:

DEFAULT TABLE([Orders])
FORM SET INPUT([Clients];"Entry")
ADD RECORD([Letters])

Campos

You designate a field by first specifying the table to which it belongs. O nome do campo segue imediatamente o nome da tabela. Um nome de campo pode conter até 31 caracteres.

Exemplos:

[Orders]Total:=Sum([Line]Amount)
QUERY([Clients];[Clients]Name="Smith")
[Letters]Text:=Capitalize text([Letters]Text)

Variáveis interprocesso

You designate an interprocess variable by preceding the name of the variable with the symbols (<>) — a “less than” sign followed by a “greater than” sign.

The name of an interprocess variable can be up to 31 characters, not including the <> symbols.

Exemplos:

<>vlProcessID:=Current process
<>vsKey:=Char(KeyCode)
If(<>vtName#"")

Variáveis processo

Designa-se uma variável de processo utilizando o seu nome (que não pode começar com os símbolos <> nem com o símbolo do dólar $). Um nome de variável de processo pode conter até 31 caracteres.

Exemplos:

<>vrGrandTotal:=Sum([Accounts]Amount)
If(bValidate=1)
vsCurrentName:=""

Variáveis locais

Uma variável local é determinada colocando um sinal de dólar ($) antes do nome da variável. A local variable name can contain up to 31 characters, not including the dollar sign.

Exemplos:

For($vlRecord;1;100)
If($vsTempVar="No")
$vsMyString:="Hello there"

Arrays

You designate an array by using its name, which is the name you pass to an array declaration (such as ARRAY LONGINT) when you create the array. Arrays are variables, and from the scope point of view, like variables, there are three different types of arrays:

  • Arrays interprocesso,
  • Arrays processo,
  • Arrays locais.

Arrays interprocesso

The name of an interprocess array is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign.

An interprocess array name can contain up to 31 characters, not including the <> symbols.

Exemplos:

ARRAY TEXT(<>atSubjects;Records in table([Topics]))
SORT ARRAY(<>asKeywords;>)
ARRAY INTEGER(<>aiBigArray;10000)

Arrays proceso

Designa-se uma variável de processo utilizando o seu nome (que não pode começar com os símbolos <> nem com o símbolo do dólar $). Um nome de array processo pode conter até 31 caracteres.

Exemplos:

ARRAY TEXT(atSubjects;Records in table([Topics]))
SORT ARRAY(asKeywords;>)
ARRAY INTEGER(aiBigArray;10000)

Arrays locais

O nome de um array local vai precedido do sinal de dólar ($). A local array name can contain up to 31 characters, not including the dollar sign.

Exemplos:

ARRAY TEXT($atSubjects;Records in table([Topics]))
SORT ARRAY($asKeywords;>)
ARRAY INTEGER($aiBigArray;10000)

Elementos de arrays

You reference an element of an interprocess, process or local array by using the curly braces("{ }"). O elemento referenciado é denotado por uma expressão numérica.

Exemplos:

 If(<>asKeywords{1}="Stop")
<>atSubjects{$vlElem}:=[Topics]Subject
$viNextValue:=<>aiBigArray{Size of array(<>aiBigArray)}

//Direcionar um elemento de um array processo If(asKeywords{1}="Stop")
atSubjects{$vlElem}:=[Topics]Subject
$viNextValue:=aiBigArray{Size of array(aiBigArray)}

//Direcionar um elemento de um array local If($asKeywords{1}="Stop")
$atSubjects{$vlElem}:=[Topics]Subject
$viNextValue:=$aiBigArray{Size of array($aiBigArray)}

Elementos de arrays bidimensionais

You reference an element of a two-dimensional array by using the curly braces ({…}) duas vezes. The element referenced is denoted by two numeric expressions in two sets of curly braces.

Exemplos:

 //Addressing an element of a two-dimensional interprocess array
If(<>asKeywords{$vlNextRow}{1}="Stop")
<>atSubjects{10}{$vlElem}:=[Topics]Subject
$viNextValue:=<>aiBigArray{$vlSet}{Size of array(<>aiBigArray{$vlSet})}

//Addressing an element of a two-dimensional process array
If(asKeywords{$vlNextRow}{1}="Stop")
atSubjects{10}{$vlElem}:=[Topics]Subject
$viNextValue:=aiBigArray{$vlSet}{Size of array(aiBigArray{$vlSet})}

//Addressing an element of a two-dimensional local array
If($asKeywords{$vlNextRow}{1}="Stop")
$atSubjects{10}{$vlElem}:=[Topics]Subject
$viNextValue:=$aiBigArray{$vlSet}{Size of array($aiBigArray{$vlSet})}

Atributos de objetos

When object notation is enabled, you designate an object attribute (also called object property) by placing a point (".") between the name of the object (or attribute) and the name of the attribute. An attribute name can contain up to 255 characters and is case sensitive.

Exemplos:

myObject.myAttribute:="10"
$value:=$clientObj.data.address.city

Note: Additional rules apply to object attribute names (they must conform to the ECMAScript specification). For more information, see Object property identifiers.

Formulários

You designate a form by using a string expression that represents its name. O nome de um formulário pode conter até 31 caracteres.

Exemplos:

FORM SET INPUT([People];"Input")
FORM SET OUTPUT([People];"Output")
DIALOG([Storage];"Note box"+String($vlStage))

Objectos de formulário

You designate a form object by passing its name as a string, preceded by the * parameter. O nome de um objeto de formulário pode conter até 255 caracteres.

Exemplo:

OBJECT SET FONT(*;"Binfo";"Times")

Note: Do not confuse form objects (buttons, list boxes, variables that can be entered, etc.) and objects in the 4D language. 4D language objects are created and manipulated via object notation or dedicated commands.

Métodos projeto

You designate a project method (procedure or function) by using its name. O nome de um método pode conter até 31 caracteres.

Note: A project method that does not return a result is also called a procedure. Um método projeto que retorna um resultado também é chamado uma função.

Exemplos:

If(New client)
DELETE DUPLICATED VALUES APPLY TO SELECTION([Employees];INCREASE SALARIES)

Dica: é uma boa técnica de programação adotar a mesma convenção de nomenclatura que a utilizada por 4D para os métodos integrados. Use uppercase characters for naming your methods; however if a method is a function, capitalize the first character of its name. By doing so, when you reopen a database for maintenance after a few months, you will already know if a method returns a result by simply looking at its name in the Explorer window.

Note: When you call a method, you just type its name. However, some 4D built-in commands, such as ON EVENT CALL, as well as all the Plug-In commands, expect the name of a method as a string when a method parameter is passed. Exemplo:

Exemplos:

 // Este comando espera um método (função) ou fórmula QUERY BY FORMULA([aTable];Special query)
// Este comando espera um método (procedimento) ou declaração APPLY TO SELECTION([Employees];INCREASE SALARIES)
//Mas este comando espera um nome de método ON EVENT CALL("HANDLE EVENTS")

Os métodos projeto podem aceitar parâmetros (argumentos). Os parâmetros se passam ao método entre parêntesis, depois do nome do método. Cada parâmetro está separado do próximo por um ponto e vírgula (;). Os parâmetros estão disponíveis dentro do método chamado como variáveis locais numeradas sequencialmente: $1, $2,..., $n. Além disso, podem ser endereçados múltiplos parâmetros consecutivos (e últimos) com a sintaxe ${n}onde n, expressão numérica, é o número do parâmetro.

Dentro de uma função, a variável local $0 contém o valor a devolver.

Exemplos:

 //Dentro de DROP SPACES $1 é um ponteiro ao campo [People]Name DROP SPACES(->[People]Name)

//Dentro de Calc creator:
//- $1 é numérico e igual a 1
//- $2 é numérico e igual a 5
//- $3 é texto ou string e igual a "Nice"
//- O valor do resultado se atribui a $0
$vsResult:=Calc creator(1;5; "Nice")

//Dentro de Dump:
//- os tres parâmetros são texto ou string
//- Se pode direcionar como $1, $2 ou $3
//- Também podem ser direcionados como, por exemplo, ${$vlParam} onde $vlParam é 1, 2 ou 3
//- O valor resultante se atribui a $0
vtClone:=Dump("is";"the";"it")

Comandos de plug-in

You designate a plug-in command by using its name as defined by the plug-in. O nome de um comando de plug-in pode conter até 31 caracteres.

Exemplos:

$error:=SMTP_From($smtp_id;"henry@gmail.com")

Conjuntos

Do ponto de vista do escopo, há dois tipos de conjuntos:

  • Conjuntos interprocesso
  • Conjuntos process

4D Server também inclui:

  • Conjuntos clientes

Conjuntos interprocesso

A set is an interprocess set if the name of the set is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign.

An interprocess set name can contain up to 255 characters, not including the <> symbols.

Conjuntos process

Para designar um conjunto processo se utilizar uma expressão de tipo string que represente seu nome (que não pode começar com os símbolos <> ou o sinal de dólar $). O nome de um conjunto pode conter até 255 caracteres.

Conjuntos clientes

O nome de um conjunto cliente deve ser precedido do sinal de dólar ($). A client set name can contain up to 255 characters, not including the dollar sign.

Nota: Os conjuntos são mantidos na máquina servidor. In certain cases, for efficiency or special purposes, you may need to work with sets locally on the Client machine. Para isso, utilizam-se os conjuntos clientes.

Exemplos:

 //Conjuntos interprocesso USE SET("<>Deleted Records")
CREATE SET([Customers];"<>Customer Orders")
If(Records in set("<>Selection"+String($i))>0)
//Conjuntos processo USE SET("Deleted Records")
CREATE SET([Customers];"Customer Orders")
If(Records in set("<>Selection"+String($i))>0)
//conjuntos clientes USE SET("$Deleted Records")
CREATE SET([Customers];"$Customer Orders")
If(Records in set("$Selection"+String($i))>0)

Seleções temporárias

Do ponto de vista do escopo, há dois tipos de seleções temporárias:

  • Seleções temporárias interprocesso
  • Seleções temporárias processo.

Seleções temporárias interprocesso

A named selection is an interprocess named selection if its name is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign.

An interprocess named selection name can contain up to 255 characters, not including the <> symbols.

Seleções temporárias processos

Para designar uma seleção nomeada se utiliza uma expressão de tipo string que represente seu nome (que não pode começar com os símbolos <> ou o sinal de dólar $). Um nome de seleção temporal pode conter até 255 caracteres.

Exemplos:

 //Interprocess Named Selection
USE NAMED SELECTION([Customers];"<>ByZipcode")
//Process Named Selection
USE NAMED SELECTION([Customers];"<>ByZipcode")

Processos

In the single-user version, or in Client/Server on the Client side, there are two types of processes:

  • Processos globais
  • Processos locais.

Processos globais

Pode determinar um processo global usando uma expressão string que represente seu nome (que não pode começar com o sinal de dólar $). Um nome de processo pode conter até 255 caracteres.

Processos locais

Pode determinar um processo local se o nome do processo for precedido pelo sinal de dólar ($). The process name can contain up to 255 characters, not including the dollar sign.

Exemplos:

 //Iniciar processo global "Add Customers"
$vlProcessID:=New process("P_ADD_CUSTOMERS";48*1024;"Add Customers")
//Iniciar processo local "$Follow Mouse Moves"
$vlProcessID:=New process("P_MOUSE_SNIFFER";16*1024;"$Follow Mouse Moves")

Resumo das convenções de escrita em 4D

A tabela seguinte resume as convenções de nomeação 4D.

IdentificadorMax. LarguraExemplo
Tabela31[Invoices]
Campo31[Employees]Last Name
Variável/array interprocesso<> + 31<>vlNextProcessID
Variável/Array processo31vsCurrentName
Variável/Array local$ + 31$vlLocalCounter
Propriedades de objetos255$o.myAttribute
Formulário31"My Custom Web Input"
Objecto de formulário255"MyButton"
Métodos proyecto31M_ADD_CUSTOMERS
Rotina Plug-in31PDF SET ROTATION
Interprocess Set<> + 255"<>Records to be Archived"
Conjunto process255"Current selected records"
Conjunto cliente$ + 255"$Previous Subjects"
Seleção nomeada255"Employees A to Z"
Seleção temporal interprocesso<> + 255"<>Employees Z to A"
Processo local$ + 255"$Follow Events"
Processo global255"P_MODULE_FACTURES"
Semáforo255"mysemaphore"

Note: If non-Roman characters are used in the names of the identifiers, their maximum length may be smaller.

Resolving Naming Conflicts

Be sure to use unique names for the different elements in your database. If a particular object has the same name as another object of a different type (for example, if a field is named Person and a variable is also named Person), 4D uses a priority system.

4D identifica os nomes utilizados nos procedimentos na seguinte ordem:

  1. Campos
  2. Comandos
  3. Página Métodos
  4. Comandos de plug-in
  5. Constantes predefinidas
  6. Variáveis.

Por exemplo, 4D tem um comando incorporado chamado Date. If you named a method Date, 4D would recognize it as the built-in Date command, and not as your method. Isto impedi-lo-ia de chamar o seu método. If, however, you named a field “Date”, 4D would try to use your field instead of the Date command.