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

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
    // ...

Veja também