Default
Comando AdvPL pra setar valor default em parametro de funcao quando NAO foi informado. Atribuicao condicional por NIL.
Assinatura: Default xParam := xValorPadrao
Retorna: NIL (comando)
Default e um comando (nao funcao) do AdvPL que atribui valor default a um parametro se ele estiver NIL. Equivale a If xParam == NIL ; xParam := xDefault ; EndIf mas em 1 linha.
Sintaxe
Default xParam := xValorPadrao
Exemplos
Static Function GeraRel(cTipo, dInicio, dFim)
Default cTipo := "GERAL"
Default dInicio := FirstDate(dDataBase)
Default dFim := LastDate(dDataBase)
// Agora todos parametros tem valor garantido
ConOut("Tipo: " + cTipo)
ConOut("Periodo: " + DToC(dInicio) + " a " + DToC(dFim))
Return
GeraRel() // usa todos defaults
GeraRel("FATURADO") // so cTipo
GeraRel("FATURADO", CtoD("01/05/2026")) // tipo + inicio
Equivalencia explicita
// Default
Default cTipo := "GERAL"
// Equivale a
If cTipo == NIL
cTipo := "GERAL"
EndIf
// Ou em forma compacta
cTipo := IIf(cTipo == NIL, "GERAL", cTipo)
Casos praticos
1. Funcao com varios parametros opcionais
Static Function Buscar(cAlias, nOrdem, cChave, lSeek)
Default nOrdem := 1
Default cChave := xFilial(cAlias)
Default lSeek := .T.
(cAlias)->(DBSetOrder(nOrdem))
If lSeek
Return (cAlias)->(DBSeek(cChave))
EndIf
Return .F.
2. Default complexo (chamada de funcao)
Default dDataRef := dDataBase
Default cUsuario := RetCodUsr()
Default cFilial := cFilAnt
3. Helper utilitario
Static Function FmtMoeda(nValor, cSimbolo, nDec)
Default cSimbolo := "R$ "
Default nDec := 2
Local cFormato := "@E 999,999,999."
Local i
For i := 1 To nDec
cFormato += "9"
Next
Return cSimbolo + AllTrim(Transform(nValor, cFormato))
FmtMoeda(1234.56) // "R$ 1.234,56"
FmtMoeda(1234.56, "US$ ") // "US$ 1.234,56"
FmtMoeda(1234.56, "US$ ", 4) // "US$ 1.234,5600"
Pegadinhas
- So funciona com NIL — string vazia
""nao e NIL, entao Default nao substitui. Pra default em "vazio", usecParam := IIf(Empty(cParam), "DEFAULT", cParam). - Em loops usar Default cada iteracao e desperdicio — declare uma vez antes do loop.
- Sequencia: Default e o primeiro comando da funcao (apos Locals).
- Multiple Default em uma linha nao funciona — uma instrucao por linha.
Anti-padrao corrigido
// ERRADO — string vazia nao e NIL
Static Function Foo(cTipo)
Default cTipo := "GERAL" // se cTipo for "", continua ""
// ...
// CERTO — pra string vazia
Static Function Foo(cTipo)
If Empty(cTipo)
cTipo := "GERAL"
EndIf
// ...