Usina BRAdvPL Guia
Entrar
← Todos os tópicos
COMANDOPublicado

IF ... ENDIF

IF <expressão lógica> ... [ELSEIF <expressão>] ... [ELSE ...] ENDIF

Executa um bloco de comandos de acordo com o resultado de uma expressão lógica.

DecisãoControle de fluxoComandos
01 · VISÃO GERAL

Visão geral

IF ... ENDIF controla a execução de instruções a partir de uma condição. Quando a expressão resulta em verdadeiro (.T.), o bloco após IF é executado. Se for falsa (.F.), cláusulas ELSEIF podem testar alternativas na ordem e ELSE pode fornecer o caminho padrão. Depois de uma alternativa ser executada, o fluxo continua após ENDIF.

02 · SINTAXE

Sintaxe

IF <expressão lógica> ... [ELSEIF <expressão>] ... [ELSE ...] ENDIF

Parâmetros

expressão lógica
LógicoObrigatório

Condição que determina se o bloco correspondente será executado.

ELSEIF
CláusulaOpcional

Permite avaliar condições alternativas em sequência.

ELSE
CláusulaOpcional

Bloco opcional executado quando nenhuma condição anterior resultar em .T.

03 · EXEMPLO PRÁTICO

Decisão simples com ELSE

User Function ExValidade(dVencimento)
    Local cMensagem := ""

    If Date() > dVencimento
        cMensagem := "Vencimento ultrapassado"
    Else
        cMensagem := "Dentro do prazo"
    EndIf

    MsgInfo(cMensagem)
Return
Resultado esperado

A comparação determina qual dos dois blocos atribui a mensagem apresentada ao usuário.

04 · EXEMPLO PRÁTICO

Múltiplas alternativas com ELSEIF

User Function ExFaixa(nTotal)
    Local cFaixa := ""

    If nTotal > 100000
        cFaixa := "Especial"
    ElseIf nTotal > 50000
        cFaixa := "Alta"
    ElseIf nTotal > 10000
        cFaixa := "Média"
    Else
        cFaixa := "Padrão"
    EndIf
Return cFaixa
Resultado esperado

A primeira condição verdadeira define a faixa; as demais alternativas são ignoradas.

05 · EXEMPLO PRÁTICO

Combinação de operadores lógicos

User Function ExAcesso(lAtivo, nNivel)
    Local lPermitido := .F.

    If lAtivo .And. nNivel >= 3
        lPermitido := .T.
    EndIf
Return lPermitido
Resultado esperado

O acesso somente é permitido quando as duas condições forem verdadeiras.

BOAS PRÁTICAS
  • Faça a condição produzir explicitamente um valor lógico.
  • Use ELSE quando houver um comportamento padrão necessário.
  • Ordene ELSEIF da condição mais específica para a mais abrangente.
  • Prefira condições curtas e extraia validações complexas para funções com nomes claros.
  • Use DO CASE quando muitas alternativas tornarem a sequência de ELSEIF difícil de ler.
ARMADILHAS COMUNS
  • Comparações e operadores lógicos mal agrupados podem selecionar um caminho diferente do esperado.
  • Muitos IF aninhados prejudicam a legibilidade e aumentam o risco de encerrar a estrutura no ponto incorreto.
  • Uma condição abrangente em um ELSEIF inicial pode tornar alternativas posteriores inalcançáveis.
  • Embora a documentação histórica informe que NIL é tratado como .F. desde o Protheus 5.07, depender desse comportamento oculta erros; valide o tipo da condição.
  • Cada IF precisa de seu ENDIF correspondente.

Conteúdos relacionados

REFERÊNCIAS
  1. TOTVS. O Comando IF...ENDIF. TDN. Criado por Rafaela Rocha Hikiji; última alteração em 21 maio 2012.
  2. TOTVS. Estruturas de Decisão no AdvPL. TDN.
Situação
Publicado
Página criada em
Última revisão em
Idioma original
Português
Revisão
Usina.BR