Bom dia pessoal, estou começando com Protheus e estou criando um fonte em tlpp, criei um objeto e também uma função com parâmetros, ao chamar a função eu não informei os parâmetros, mas compilou normalmente... me casou estranheza, pois em outras linguagem se minha função tem parâmetros, em vias normais eu preciso informa-los. Aproveitando o gancho uma outra perguntar, tlpp trabalha com parâmetros nomeados?
Obrigado desde já.
Olá,
Em ADVPL ou TLPP não existem parâmetros nomeados.
Quanto a não enviar os parâmetros, por padrão, todo parâmetro em ADVPL ou TLPP é opcional, você pode declarar um método/função com dez parâmetros e não enviar nenhum deles. Para enviar somente um parâmetro não sendo o primeiro, você deve ignorar os anteriores usando uma vírgula, basicamente enviando null:
#include "protheus.ch"
user function xisto(p1, p2, p3)
return
user function callXisto()
u_xisto(,2,3) //Enviar somente os últimos parâmetros
u_xisto(,,3) //Enviar só o terceiro parâmetro
u_xisto(,2) //Enviar só o segundo parâmetro
u_xisto(1) //Enviar só o primeiro parâmetro
return
Esclarecido, obrigado Daniel.
Atualmente o compilador apresenta alguns alertas sobre parâmetros em casos específicos (como passar mais parâmetros que a função aceita). Caso queria e ache mais seguro, pode utilizar o ParamType para fazer estas validações em tempo de execução, seria bom se pudesse ser em tempo de compilação, mas não é.
Ex.:
#Include "ParmType.ch"
ParamType 0 VAR cChave AS Character //Parametro character obrigatório
ParamType 1 VAR nPos AS Numeric Opcional //Numérico opcional com default NIL
ParamType 3 VAR lMsg AS Logical Opcional Default .T. //Numérico opcional com default .T.