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
- Ambos lados sao SEMPRE avaliados — se um lado e funcao com efeito colateral, executa mesmo se nao for o caso:
// PERIGOSO — Apaga() executa SEMPRE, independente de lDeletar IIf(lDeletar, Apaga(), NIL) // CORRETO — usar If/EndIf If lDeletar Apaga() EndIf - Tipos divergentes nos dois lados — comportamento indefinido em alguns contextos.
- Aninhamento profundo fica ilegivel — > 2 niveis, use Do Case.
- If function vs comando If — em AdvPL existem dois:
IIf(...)eIf(...). Funcionalmente equivalentes, mas IIf e mais comum.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
lCondicao | Logical | sim | Expressao avaliada. |
xSim | Any | sim | Valor se .T. |
xNao | Any | sim | Valor se .F. |