Pare a imprensa! O acesso aos parâmetros que não estão a ser passados é … possível

Tradução automática de Deepl

Um método ou função pode ter parâmetros opcionais. Por vezes a função é chamada com dois parâmetros, e outras vezes com três parâmetros. Todos sonhamos em aceder aos parâmetros sem contar os parâmetros, verificar se o parâmetro foi passado, ou simplesmente não ter de verificar se a variável associada ao parâmetro foi inicializada. Isto poderia tornar o código muito mais simples, e muito mais legível, sem todas as linhas “Se” ou “Contar parâmetros”.

Bem, não sonhe mais, e mude para 4D v19 R3! O método de gestão e parâmetros de função nunca foi tão fácil.

Aceder aos parâmetros

Agora, para parâmetros que declarou no protótipo de uma função ou método, se o parâmetro não for passado durante a chamada, a variável é instanciada para o valor vazio. Mesmo no modo compilado, já não se tem um erro de tempo de execução para isso. Nesta página de documentação, tem uma tabela com a correspondência para cada tipo de variável.

No exemplo seguinte, a função utiliza os parâmetros $param1 e $param2 sem verificação. Se, ao chamar a função, os parâmetros $param1 e/ou $param2 não forem passados, 4D instancia a variável de texto para uma cadeia vazia:

// "concate" function class
Function concate ( : ; : ) ( +" "+ ) $param1 Text $param2 Text
Alert$param1$param2

// "method1" method
$class. ("Olá";" mundo") . ("Olá") . ()concate // Display: "Hello world"
$classconcate // Display: "Hello "
$classconcate // Display: " "

Tenham cuidado. Para que a 4D possa instanciar a sua variável, precisa de conhecer o tipo dessa variável. Se utilizar a notação ${i} e não tiver passado e declarado o parâmetro, obterá sempre um erro de execução no modo compilado.

Inicializar os parâmetros

Acabámos de ver que se um parâmetro não for passado, a sua variável associada é instanciada para o valor vazio. Por isso, agora pode utilizar a função Choose para definir directamente um valor se o parâmetro não for passado.

Aqui está um exemplo com um método e o comando #DECLARE instrução:

// "myAlert" method
#DECLARE($param1: Text; $param2: Text)
$param1 :=Choose(Count parameters>=1 ; $param1; "Olá")
$param2 :=Choose(Count parameters>=2 ; $param2; "mundo")
Alert ($param1+" "+$param2)

// "method1" method
myAlert
() // Display: "Hello world"

E quanto aos componentes?

Para beneficiar desta simplificação, o método chamado e o método de chamada devem ser recompilados. Assim, no caso de um método partilhado entre a base anfitriã e um componente, ambos os projectos precisam de ser recompilados.

Mas, e quanto aos componentes compilados, cujas fontes não tenho? Não se preocupe, ainda pode utilizá-los como antes. Não há necessidade de alterar o seu código.

O que se segue?

Esta nova funcionalidade dá-lhe muitas ideias para os seus métodos e funções. Esteja à vontade para partilhar as suas dicas no fórum.

Vanessa Talbot
• Proprietário do produto - Vanessa Talbot entrou ao time 4D Program em Junho de 2014 como Proprietária do Produto e está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Desde sua chegada, trabalhou na definição de funcionalidades chaves em 4D. Trabalhou na maioria das novas funcionalidades multithread preemptivo e também em um tema muito complexo: a nova arquitetura para a aplicação engined. Vanessa é formada pela Telecom Saint-Etienne. Começou sua carreira no Instituto de Investigação Criminal como desenvolvedora do departamento audiovisual. Também trabalhou em meios de comunicação e no âmbito médico como especialista em assistência técnica, produção e documentação de novas funcionalidades.