Páginas filhas
  • IF ... ELSEIF ... ELSE ... ENDIF

Sintaxe

 

IF <condição>

          ...

          < instruções >

          ...

[ ELSEIF <condição> ]

          ...

          < instruções >

          ...

[ ELSEIF <condição> ]

          ...

          < instruções >

          ...

[ ELSE ]

          ...

          < instruções >

          ...

ENDIF

 

Propósito

 

O comando IF ... ELSEIF ... ENDIF é um comando de programação estruturada que seleciona uma alternativa entre um conjunto de caminhos para o curso do fluxo de execução do programa. O caminho selecionado é o primeiro no qual a condição especificada seja avaliada como verdadeira.

 

Argumentos

 

<condição>

 

Define uma expressão lógica de controle. Se for avaliada como verdadeira (.T.), todas as instruções entre ela e o próximo ELSEIF, ELSE ou ENDIF serão executadas.

 

ELSEIF

 

Identifica o bloco de instruções que será executado caso a condição associada seja avaliada como verdadeira e as condições dos comandos IF ou ELSEIF precedentes foram avaliadas como falsas.

 

Não há limite de condições (ELSEIF) dentro de uma estrutura de controle IF ... ELSEIF ... ENDIF.

 

ELSE

 

Identifica o bloco de instruções que será executado caso nenhuma das condições associadas aos comandos IF ou ELSEIF precedentes seja avaliada como verdadeira. Neste caso, serão executadas as instruções que vierem entre o ELSE e o ENDIF.

 

Utilização

 

É obrigatória a existência do ENDIF (fim do IF) ao final da estrutura do comando IF ... ELSEIF ... ENDIF.

 

A cláusula ELSE especifica o bloco de instruções alternativo que será executado caso nenhuma condição expressa nos comandos ELSEIF tenha sido avaliada como verdadeira. Se todos os comandos ELSEIF forem falsos e existir o ELSE, serão executadas as instruções que estiverem entre o ELSE e o ENDIF. Caso contrário, o fluxo de execução será desviado para a primeira linha após o ENDIF.

 

Comandos IF ... ELSEIF ... ENDIF intercalados, isto é, uns dentro dos outros, são permitidos, desde que intercalados corretamente. Ao se incluir pares de outras estruturas de comandos, como DO CASE ... ENDCASE, IF ... ENDIF, WHILE ... ENDDO e FOR ... NEXT, dentro de um IF ... ELSEIF .. ENDIF principal, estas devem ser iniciadas e finalizadas dentro da estrutura IF ... ELSEIF ... ENDIF na qual estiverem contidas.

 

Não há limite quanto ao número de estruturas de comandos que podem ser intercaladas. Porém, sugere-se que a profundidade de intercalação não seja exagerada. Um bom número é ter, no máximo, 5 níveis.

 

Também não limite para o número de ELSEIF que pode existir dentro de uma estrutura IF ... ELSEIF ... ENDIF.

 

Dicas

 

A cláusula ELSEIF <condição> define uma declaração condicional que será avaliada como falsa ou verdadeira. Esta condição deve ser uma expressão lógica, tal como os exemplos abaixo:

 

  • A == B
  • nVar1 < 11
  • nVop == 1
  • cNome == “Cosentino”

 

Quando a condição de um ELSEIF é avaliada como verdadeira, todos os comandos que estão entre ela e o próximo ELSEIF, ELSE ou ENDIF são executados. Neste caso, mais nenhum outro ELSEIF será avaliado e o fluxo de execução passará diretamente para a primeira linha de instrução após o ENDIF.

 

Caso nenhum ELSEIF seja avaliado como verdadeiro e a cláusula ELSE não existir, o fluxo de execução do programa é desviado diretamente para a primeira linha de instrução após o ENDIF.

 

A estrutura do IF ... ELSEIF ... ENDIF pode ser utilizada quando há um determinado número de exceções em relação a uma regra de execução a ser seguida. Os IF ... ELSEIF <condição> representarão estas exceções, enquanto o ELSE representará a situação mais comum.

 

O comando IF ... ELSEIF ... ENDIF é exatamente equivalente ao comando DO CASE ... CASE ... ENDCASE. Não há, portanto, vantagem nenhuma na utilização de um sobre o outro.

 

Exemplos

 

A função abaixo decide sobre o percentual de desconto que será aplicado sobre o salário dos funcionários, de acordo com cada faixa salarial:

 

FUNCTION CalcDesc(nSalario)

 

LOCAL nDescont := 0

 

IF nSalario > 12000 .AND. nSalario < 20000

         nDescont := nSalario * 0.10

 

ELSEIF nSalario >= 20000 .AND. nSalario < 40000

         nDescont := nSalario * 0.15

 

ELSEIF nSalario >= 40000 .AND. nSalario < 60000

         nDescont := nSalario * 0.20

 

ELSEIF nSalario >= 60000 .AND. nSalario < 90000

         nDescont := nSalario * 0.25

 

ELSEIF nSalario >= 90000 .AND. nSalario < 150000

         nDescont := nSalario * 0.30

 

ELSEIF nSalario >= 150000 .AND. nSalario < 200000

         nDescont := nSalario * 0.40

 

ELSE

         nDescont := nSalario * 0.50

ENDIF

 

RETURN nDescont

 

 

  • Sem rótulos