Documento: Estruturas de Decisão


Desvio Condicional

O comando IF ... ELSE ... ENDIF (SE ... SENÃO ... FIM DO SE) permite condicionar a execução de uma sequência de instruções. Esta estrutura de programação decide entre dois caminhos alternativos, dependendo se uma condição especificada for verdadeira ou falsa. Após a execução de um dos caminhos, os dois caminhos unem-se novamente. Por exemplo:

// Função de cálculo do Imposto de Renda Pessoa Física (IRPF)
FUNCTION CalcIR(nSalario)

LOCAL nDesconto := 0

IF nSalario > 5000
               nDesconto := nSalario * 0.275
ELSE
               nDesconto := nSalario * 0.15
ENDIF

MSGALERT("O desconto sobre o salário é de R$ " + Str(nDesconto, 9, 2))

RETURN nDesconto

O comando ELSE é opcional. Caso ele não seja utilizado, será executada apenas a instrução referente à condição lógica verdadeira. Vejamos o exemplo:

// Função de cálculo da comissão do vendedor
FUNCTION CalcCom(nTotVen)

LOCAL nComissao := 0

IF nTotVen > 50000
               nComissao := nTotVen * 0.03
ENDIF

MSGALERT("A comissão do vendedor é de R$ " + Str(nComissao, 9, 2))

RETURN nComissao

Portanto, se a condição lógica especificada no comando IF for avaliada como verdadeira (.T.), será executado o bloco de instruções entre o IF e o ELSE, ou entre o IF e o ENDIF, caso o ELSE não seja especificado.

Caso a condição seja avaliada como falsa (.F.), o bloco de instruções entre o ELSE e o ENDIF será executado. Caso o ELSE não tenha sido especificado, então nenhum bloco de instruções será executado.

Desvio Múltiplo

Dependendo de determinadas condições, em algumas rotinas há a necessidade de se escolher um único caminho entre diversas alternativas para a continuação do fluxo de execução. Os comandos DO CASE ... ENDCASE e IF ... ELSEIF ... ENDIF permitem a tomada de decisão entre três ou mais alternativas de processamento.

Portanto, quando a escolha do caminho a ser seguido pelo fluxo de controle envolve mais de duas alternativas, é necessário o uso da estrutura de Desvio Múltiplo ou "Caso". A escolha é feita dependendo da condição de cada alternativa. Apenas uma das alternativas, a que primeiro atender a sua condição, será executada. Vejamos o exemplo:

// Função de cálculo do Imposto de Renda Pessoa Física (IRPF)
FUNCTION CalcIR(nSalario)

LOCAL nDesconto := 0

DO CASE
       CASE nSalario > 5800
               nDesconto := nSalario * 0.275

       CASE nSalario >= 3400
               nDesconto := nSalario * 0.15

       CASE nSalario >= 2300
               nDesconto := nSalario * 0.075

       OTHERWISE
               cCondicao := "ISENTO"
ENDCASE

IF EMPTY(nDesconto)
               MSGALERT(cCondicao)
ELSE
               MSGALERT("O desconto sobre o salário é de R$ " + Str(nDesconto, 9, 2))
ENDIF
 
RETURN nDesconto

A cláusula OTHERWISE (de outra forma) é opcional e significa que serão executadas as instruções que vierem entre ela e o ENDCASE (fim do CASE) caso nenhuma das condições for satisfeita.

O comando IF ... ELSEIF ... ENDIF é uma alternativa para a estrutura de controle de desvio múltiplo, pois o seu funcionamento é equivalente ao do comando DO CASE ... CASE ... ENDCASE. O exemplo anterior pode ser reconstruído utilizando-se o comando IF ... ELSEIF ... ENDIF da seguinte forma:

// Função de cálculo do Imposto de Renda Pessoa Física (IRPF)
FUNCTION CalcIR(nSalario)

LOCAL nDesconto := 0

IF nSalario > 5800
               nDesconto := nSalario * 0.275

ELSEIF nSalario >= 3400
               nDesconto := nSalario * 0.15

ELSEIF nSalario >= 2300
               nDesconto := nSalario * 0.075

ELSE
               cCondicao := "ISENTO"
ENDIF

IF EMPTY(nDesconto)
               MSGALERT(cCondicao)
 
ELSE
               MSGALERT("O desconto sobre o salário é de R$ " + Str(nDesconto, 9, 2))
ENDIF
 
RETURN nDesconto

A cláusula ELSE (senão) é opcional e significa que serão executadas as instruções que vierem entre ela e o ENDIF (fim do desvio múltiplo) caso nenhuma condição seja satisfeita.

 

  • Sem rótulos