Página Métodos
Um método é basicamente um pedaço de código que executa uma ou várias acções. Na linguagem 4D, há duas categorias de métodos:
Uma linha de instrução realiza uma ação e pode ser simples ou complexa. Cada instrução geralmente consiste em uma linha no método (se necessário, no entanto, pode ser dividida usando o caractere \
).
O tamanho máximo de um método de projecto é limitado a 2 GB de texto ou 32.000 linhas de comando.
Métodos especializados
Na Linguagem 4D, existem várias categorias de métodos. A categoria depende da forma como podem ser chamados:
Tipo | Contexto de chamada | Aceita parâmetros | Descrição |
---|---|---|---|
Métodos projeto | Por demanda, quando chamar ao nome do método projeto (ver Chamando a métodos projeto) | Sim | Pode conter qualquer código para executar ações personalizadas Quando um método projeto for criado, se torna parte parte da linguagem do banco de dados na qual foi criado. |
Método objeto (widget) | Automático, quando um evento envolve a forma a que o método está ligado | Não | Propriedade de um objecto de formulário (também chamado widget) |
Método formulário | Automático, quando um evento envolve o objecto ao qual o método está ligado | Não | Propriedade de um formulário. Pode-se utilizar um método de formulário para gerir dados e objectos, mas é geralmente mais simples e mais eficiente utilizar um método de objecto para estes fins. |
Trigger (o método tabla) | Automático, cada vez que manipula os registos de uma tabela (Adicionar, Apagar e Modificar) | Não | Propriedade de uma tabela. Os gatilhos/triggers são métodos que podem prevenir operações "ilegais" com os registos da sua base de dados. |
Método base | Automático, quando ocorre um evento de sessão de trabalho | Sim (pré-definido) | Existem 16 métodos base em 4D. |
Class | Funções de classe são chamadas no contexto de uma instância de objeto | sim | As funções de classe podem ser incorporadas (por exemplo collection.orderBy() ou entity.save() ), ou criadas pelo desenvolvedor do 4D. Veja Classes |
Métodos projeto recursivos
Um método de projecto pode ter uma das seguintes funções, dependendo de como é executado e utilizado:
- Constantes
- Objeto fórmula
- Método do menu
- Método de gerenciamento de processos
- Método de captura de eventos ou erros
Também pode executar os seus métodos projeto manualmente, por exemplo, para fins de teste.
Sugestões
Uma sub-rotina é um método de projecto que pode ser pensado como um servo. Executa as tarefas que outros métodos lhe pedem para executar. Uma função é uma sub-rotina que devolve um valor ao método que a chamou.
Quando criar um método projeto, este passa a formar parte da lingagem do banco de dados no qual foi criado. Você pode então chamar o método projeto a partir de outro método (método projeto, método de objeto...) da mesma forma que você chama os comandos internos do 4D. Um método de projecto utilizado desta forma é chamado de sub-rotina.
Utiliza sub-rotinas para:
- Reduzir a codificação repetitiva
- Esclareça os seus métodos
- Facilitar mudanças nos seus métodos
- Modularize o seu código
Por exemplo, suponha que tenha um banco de dados de clientes. Ao personalizar o banco de dados, pode perceber que ha'tarefas que tem que realizar repetidamente, como achar um cliente e modificar seu registro. O código para fazer isso parece-se com o seguinte:
// Procure um cliente
QUERY BY EXAMPLE([Customers])
// Selecione o formulário de entrada
FORMULÁRIO DE ENTRADA([Customers]; "Data Entry")
// Modifique o registo do cliente
MODIFY RECORD([Customers])
Se não utilizar sub-rotinas, terá de escrever o código cada vez que quiser modificar o registo de um cliente. Se houver dez lugares na sua base de dados personalizada onde precise fazer isso, terá de escrever o código dez vezes. Se utilizar sub-rotinas, só terá de o escrever uma vez. Esta é a primeira vantagem das sub-rotinas - reduzir a quantidade de código.
Se o código descrito anteriormente fosse um método chamado MODIFY_CUSTOMER
, você o executaria simplesmente usando o nome do método em outro método. Por exemplo, para modificar o registo de um cliente e depois imprimir o registo, escrever-se-ia este método:
MODIFY CUSTOMER
PRINT SELECTION([Customers])
Esta capacidade simplifica dramaticamente os seus métodos. No exemplo, você não precisa saber como o método MODIFY_CUSTOMER
funciona, apenas o que ele faz. Esta é a segunda razão para a utilização de sub-rotinas para esclarecer os seus métodos. Desta forma, os seus métodos tornam-se extensões à linguagem 4D.
Se precisar mudar seu método de pesquisa de clientes nesse banco de dados de exemplo, terá que mudar apenas um método, não dez. Este é o próximo motivo para utilizar sub-rotinas para facilitar mudanças nos seus métodos.
Usando sub-rotinas, você torna o seu código modular. Isto significa simplesmente a divisão do seu código em módulos (sub-rotinas), cada um dos quais executa uma tarefa lógica. Considere o código abaixo de um banco de dados de contas correntes:
FIND CLEARED CHECKS ` Buscar os cheques emitidos
RECONCILE ACCOUNT ` Reconciliar a conta
PRINT CHECK BOOK REPORT ` Imprimir um relatório da conta
Mesmo para alguém que não conheça o banco de dados, é claro o que o código faz. Não é necessário examinar cada sub-rotina. Cada sub-rotina pode ter muitas linhas e realizar algumas operações complexas, mas aqui é apenas importante que desempenhe a sua tarefa. Recomendamos que divida o seu código em tarefas lógicas, ou módulos, sempre que possível.
Objeto fórmula
Você pode encapsular os métodos do seu projeto em objetos fórmula e chamá-los a partir dos seus objetos.
Os comandos Formula
ou Formula from string
permitem-lhe criar objetos de fórmula nativa que você pode encapsular em propriedades de objeto. Permite-lhe implementar métodos de objectos personalizados.
Para executar um método armazenado em uma propriedade de objeto, use o operador () depois do nome da propriedade. Por exemplo:
//myAlert ALERT("Hello world!")
Então myAlert
pode ser encapsulado em qualquer objeto e chamado:
C_OBJECT($o)
$o:=New object("custom_Alert";Formula(myAlert))
$o.custom_Alert() //displays "Hello world!"
Também se admite a sintaxe com parênteses:
$o["custom_Alert"]() //exibe "Hello world!"
Você também pode passar parâmetros para sua fórmula quando você a chamar usando $1, $2… assim como nos métodos do projeto 4D:
//fullName method C_TEXT($0;$1;$2)
$0:=$1+" "+$2
Você pode encapsular fullName
em um objeto:
C_OBJECT($o)
$o:=New object("full_name";Formula(fullName))
$result:=$o.full_name("John";"Smith")
//$result = "John Smith"
// equivalent to $result:=fullName("param1";"param2")
Combinado com a função This
, tais métodos de objectos permitem escrever um poderoso código genérico. Por exemplo:
//fullName2 method C_TEXT($0)
$0:=This.firstName+" "+This.lastName
Então o método atua como um novo atributo calculado que pode ser adicionado a outros atributos:
C_OBJECT($o)
$o:=New object("firstName";"Jim";"lastName";"Wesson")
$o.fullName:=Formula(fullName2) //add the method
$result:=$o.fullName()
//$result = "Jim Wesson"
Note-se que, mesmo que não tenha parâmetros, um método de objeto a ser executado deve ser chamado com ()
parênteses. Chamar só a propriedade de objeto devolverá uma nova referência à fórmula (e não a executará):
$o:=$f.message //devolve o objeto fórmula em $o
Métodos do menu
Um método de menu é invocado quando se selecciona o comando do menu personalizado ao qual está anexado. Atribui-se o método ao comando menu usando o editor de menu ou um comando do tema "Menus". O método executa-se quando o comando do menu é escolhido. Ao criar menus personalizados com métodos de menu que realizam ações específicas, pode personalizar seu banco de dados.
Os comandos personalizados do menu podem causar a realização de uma ou mais actividades. Por exemplo, um comando de menu para inserir registros pode chamar um método que realiza duas tarefas: exibir o formulário de entrada apropriado e chamar o comando ADD RECORD
até que o usuário cancele a atividade de entrada de dados.
A automatização de sequências de actividades é uma capacidade muito poderosa da linguagem de programação. Usando menus personalizados, pode automatizar sequências de tarefa e fornecer mais orientação aos usuários do banco de dados.
Métodos Processo
Um método de processo é um método de projeto que é chamado quando um processo é iniciado. O processo dura apenas enquanto o método do processo continuar a ser executado, excepto se for um processo de Worker. Note-se que um método de menu anexado a um comando de menu com a propriedade Start a New Process é também o método de processo para o processo recentemente iniciado.