IIf

If inline — operador ternario do AdvPL. Mais conciso que If/Else/EndIf pra atribuicoes condicionais simples.

Assinatura: IIf(lCondicao, xQuandoSim, xQuandoNao) -> x

Retorna: Any (mesmo tipo dos parametros)

IIf (Inline If) e o operador ternario do AdvPL. Avalia uma condicao, retorna um valor ou outro. Forma compacta substituindo If/EndIf em atribuicoes.

Sintaxe

IIf(lCondicao, xVerdadeiro, xFalso) --> x

Exemplos basicos

cStatus := IIf(SC5->C5_LIBEROK == "S", "Liberado", "Pendente")

nDesc := IIf(SA1->A1_GRPVEN == "VIP", 0.10, 0.05)

cIcon := IIf(nValor > 0, "+", "-")

dPrazo := IIf(Empty(SE1->E1_VENCTO), dDataBase + 30, SE1->E1_VENCTO)

Equivalencia com If/EndIf

// Verboso
If lCondicao
    nValor := 100
Else
    nValor := 50
EndIf

// Conciso (mesma coisa)
nValor := IIf(lCondicao, 100, 50)

Casos praticos

1. Mensagem condicional

MsgInfo("Resultado: " + IIf(lSucesso, "OK", "FALHOU"))

2. Default value

// Se vazio, usa default
cNome := IIf(Empty(cInput), "DEFAULT", cInput)

3. Conversao numero -> texto

cTipo := IIf(M->A1_PESSOA == "J", "Juridica", "Fisica")

4. Multiplas condicoes encadeadas

// Avalia 3 niveis (cuidado com legibilidade)
cFaixa := IIf(nValor > 10000, "Premium", ;
         IIf(nValor > 5000, "Gold", ;
             IIf(nValor > 1000, "Silver", "Bronze")))

// Para 3+ niveis, considere Do Case (mais legivel)
Do Case
    Case nValor > 10000 ; cFaixa := "Premium"
    Case nValor > 5000  ; cFaixa := "Gold"
    Case nValor > 1000  ; cFaixa := "Silver"
    Otherwise           ; cFaixa := "Bronze"
EndCase

Pegadinhas

Parâmetros

NomeTipoObrigatórioDescrição
lCondicaoLogicalsimExpressao avaliada.
xSimAnysimValor se .T.
xNaoAnysimValor se .F.

Veja também