Uma visita rápida
Usando a linguagem 4D, imprimir a mensagem tradicional ""Hello, world!" na tela pode ser feito de várias maneiras. A maneira mais simples é provavelmente escrever a linha única abaixo em um método de projeto:
ALERT("Hello, World!")
Esse código vai exibir um alerta normal de plataforma com a mensagem "hello world" contendo um botão OK. Para executar o código, precisa clicar no botão de execução do editor de Método:
Ou poderia anexar esse código a um botão em um formulário e executar o formulário, nesse caso, clicar no botão exibira a caixa de diálogo de alerta. Em qualquer caso, acabou de executar sua primeira linha de código 4D!
Atribuir valores
Dados podem ser colocado ou copiados de ou em variáveis, campos, elementos arrays... Colocar dados em uma variável é chamado atribuiindo os dados a uma variável e é feito com o operador de atribuição (:=). O operador de atribuição também é usado para atribuir dados para elementos campos ou arrays.
$MyNumber:=3 //atribui 3 à variável MyNumber
[Products]Size:=$MyNumber //atribui a variável MyNumber ao campo [Products]Size
arrDays{2}:="Tuesday" //atribui a string "Tuesday" ao segundo elemento arrDays
MyVar:=Length("Acme") //atribui o resultado da função (4) a MyVar
$myDate:=!2018/01/21! //atribui um literal de data
$myHour:=?08:12:55? //atribui um literal de hora
Você DEVE diferenciar o operador atribuição := dos outros operadores. Ao invés de combinar expressões a uma nova, o operador de atribuição copia o valor da expressão para a direita do operador de atribuição para a variável ou campo para a esquerda do operador.
Importante: Não confunda o operador de atribuição := com o operador de comparação de igualdade =. Um operador de atribuição diferente (e não =) foi escolhido deliberadamente para evitar problemas e confusão que ocorrem frequentemente em outras linguagens com operadores como == ou ===. Esses erros são geralmente difíceis de reconhecer pelo compilador e geram problemas trabalhosos.
Variáveis.
A linguagem 4D é baseada em tipos, mas com alguma flexibilidade. Você cria uma variável digitada usando a palavra-chave var
. Por exemplo, para criar uma variável do tipo dados, pode escrever:
var MyDate : Date
A palavra-chave var
permite declarar variáveis de objeto de um tipo de classe definido, por exemplo:
var myPerson : cs.Person
//variável da classe usuário Person
Even if it is usually not recommended, you can create variables simply by using them; you do not necessarily need to formally define them. Por exemplo, se quiser criar uma variável que contenha a data atual mais 30 dias, pode escrever:
MyOtherDate:=Current date+30
A linha de código lê “MyOtherDate gets the current date plus 30 days.” This line creates the variable, assigns it with both the (temporary) date type and a content. A variable created by assignment is interpreted as typeless, that is, it can be assigned with other types in other lines and change of type dynamically. This flexibility does not apply to variables declared with the var
keyword (their type cannot change) and in compiled mode where the type can never be changed, regardless of how the variable was created.
Comandos
Os comandos 4D são métodos integrados para realizar uma ação. Comandos são frequentemente usados com parâmetros, que são passados em parênteses () e separados por ponto e vírgula (;). Exemplo:
COPY DOCUMENT("folder1\\name1";"folder2\\" ; "new")
Alguns comandos são anexados à coleções ou objetos, em cujo caso são métodos temporais que se utilizam com a notação de pontos. Por exemplo:
$c:=New collection(1;2;3;4;5)
$nc:=$c.slice(0;3) //$nc=[1,2,3]
$lastEmployee:=$employee.last()
Pode utilizar os plug-ins ou os componentes 4D que adicionem novos comandos a seu entorno de desenvolvimento 4D.
Há vários plug-ins propostos pela comunidade de usuários 4D ou desenvolvedores de terceira parte no mercado. Por exemplo, usando o 4d-plugin-pdf-pages no macOS:
PDF REMOVE PAGE(path;page)
4D SVG é um exemplo de componente utilitário que aumenta as capacidades de sua aplicação:
//desenhar uma imagem
svgRef:=SVG_New
objectRef:=SVG_New_arc(svgRef;100;100;90;90;180)
4D SVG é incluído em 4D.
Constantes
4D oferece um conjunto extensivo de constantes predefinidas, cujos valores são acessíveis por nome. Isso permite escrever código mais legível. Por exemplo, Read Mode
é uma constante (valor 2).
vRef:=Open document("PassFile";"TEXT";Read Mode) // abre documento em modo apenas leitura
As constantes pré-definidas aparecem sublinhadas como padrão no editor de métodos 4D.
Página Métodos
4D oferece um grande número de métodos (ou comandos) incorporados, mas também permite que você crie seus próprios métodos de projeto. Os métodos de projeto são métodos definidos pelo usuário que contenham comandos, operadores e outras partes da linguaje. Los métodos projeto são métodos genéricos, mas há outros tipos de métodos: métodos objeto, métodos formulário, métodos tabela (Triggers) e métodos base.
Um método projeto é composto de várias linhas de instruções, cada uma das quais consta de uma linha no método. Uma linha de instrução realiza uma ação e pode ser simples ou complexa.
Por exemplo, a linha abaixo é uma declaração que mostará uma caixa de diálogo de confirmação:
CONFIRM("Quer realmente fechar esta conta?"; "Sím"; "Não")
Um método também contém testes e loops que controlam o fluxo da execução. Os métodos 4D suportam estruturas de ramificação If...Else...End if
e Case of...Else...End case
, bem como estruturas de looping: While...End while
, Repeat...Until
, For...End for
e For each...End for each
:
O exemplo abaixo recorre todos os caracteres do texto vtSomeText:
For($vlChar;1;Length(vtSomeText))
//Faça algo com o caractere se ele for um TAB
If(Character code(vtSomeText[[$vlChar]])=Tab)
//...
End if
End for
Um método projeto pode chamar a outro método projeto com ou sem 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 (;). A method can return a single value in a parameter, which have to be declared. Os parâmetros estão disponíveis dentro do método chamado como variáveis locais numeradas sequencialmente: $1, $2,..., $n. Um método pode devolver um único valor no parâmetro $0. Quando chamar um método, apenas digite seu nome:
$myText:="hello"
$myText:=Do_Something($myText) //Chamar o método Do_Something
ALERT($myText) //"HELLO"
//Aqui o código do método Do_Something
#DECLARE ($in : Text) -> $out : Text
$out:=Uppercase($in)
Tipos de dados
Na linguagem, os diferentes tipos de dados que podem ser manejados são denominados tipos de dados. Existem tipos de dados básicos (string, numérico, data, hora, booleano, imagem, ponteiros, arrays), e também tipos de dados compostos (BLOBs, objetos, coleções).
Lembre que os dados de tipo string e numérico podem ser associados a mais de um tipo de campo. Quando são introduzidos dados em um campo, a linguagem converte automaticamente os dados no tipo correto para o campo. Por exemplo, se um campo inteiro for usado, seus dados são tratados automaticamente como numéricos. Em outras palavras não precisa se preocupar sobre misturar tipos de campos similares quando usando a linguagem; vai ser gerenciada por você.
Entretanto, quando usar a linguagem é importante que não misture diferentes tipos de dados. Da mesma forma que não tem sentido armazenar "ABC" em um campo de data, tampouco tem sentido por "ABC" em uma variável utilizada para datas. Na maioria dos casos, 4D é muito tolerante e tentará dar sentido ao que está fazendo. Por exemplo, se adicionar um número a uma data, 4D assumirá que quer adicionar esse número de dias à data, mas se tentar adicionar uma string a uma data, 4D dir-lhe-á que a operação não pode funcionar.
Há casos em que é necessário armazenar dados como um tipo e utilizá-los como outro tipo. A linguagem contém um conjunto completo de comandos que permitem a conversão de um tipo de dados para outro. Por exemplo, pode ser necessário criar um número de peça que comece com um número e termine com caracteres como "abc". Neste caso, poderá escrever:
[Products]Part Number:=String(Number)+"abc"