Sintaxe

 

DO CASE

         CASE <condição>

                    ...

                    < instruções >

                    ...

 

         [ CASE <condição> ]

                    ...

                    < instruções >

                    ...

 

          [ OTHERWISE ]

                    ...

                    < instruções >

                    ...

ENDCASE

 

Propósito

 

O comando DO CASE ... ENDCASE é um comando de programação estruturada que seleciona apenas uma alternativa entre um conjunto de caminhos para o curso do fluxo de execução. O caminho selecionado é o primeiro para o qual uma condição especificada for avaliada como verdadeira.

 

Argumentos

 

CASE <condição >

 

Define um bloco de instruções a ser executado caso a condição especificada seja avaliada como verdadeira (.T.).

 

OTHERWISE

 

Define um bloco de instruções a ser executado caso nenhuma das cláusulas CASE <condição> seja avaliada como verdadeira.

 

Utilização

 

O DO CASE é um comando de controle que deve ser utilizado para determinar a escolha de um entre vários blocos de instruções. O bloco executado será aquele cuja condição especificada na cláusula CASE for avaliada como verdadeira. A execução do bloco selecionado continua até que o próximo CASE, OTHERWISE ou ENDCASE seja encontrado. Quando uma cláusula CASE é avaliada como verdadeira, nenhuma outra será avaliada.

 

Após a execução das instruções contidas no bloco selecionado, o fluxo de execução é desviado para a linha de instrução imediatamente seguinte ao ENDCASE. Portanto, é obrigatória a existência do ENDCASE (fim do DO CASE) ao final da estrutura do comando DO CASE.

 

A cláusula OTHERWISE é um caminho alternativo que será seguido caso nenhuma condição especificada nas cláusulas CASE tenha sido avaliada como verdadeira. Portanto, se todas as condições especificadas nas cláusulas CASE forem falsas e existir o comando OTHERWISE, será executado o bloco de instruções entre a cláusula OTHERWISE e ENDCASE. Caso a cláusula OTHERWISE não foi especificada, o fluxo de execução é desviado para a primeira linha de instruções após o ENDCASE.

 

Vários comandos DO CASE intercalados, isto é, uns dentro dos outros, é permitido, desde que a intercalação seja feita corretamente.

 

Ao se incluir pares de outras estruturas de controle, como DO CASE ... ENDCASE, IF ... ENDIF, WHILE ... ENDDO e FOR ... NEXT dentro de um DO CASE principal, estas devem ser corretamente intercaladas. Isto é, devem iniciar-se e finalizar-se dentro da estrutura DO CASE ... ENDCASE principal.

 

Não há limitações para o número de estruturas de controle que podem ser intercaladas. Também não há limite para o número de cláusulas CASE que podem existir dentro de uma estrutura DO CASE ... ENDCASE.

 

Dicas

 

A cláusula CASE <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:

 

 

Em situações onde pode haver apenas uma condição avaliada como verdadeira ou onde apenas a primeira condição verdadeira deve ser executada, o uso do DO CASE é mais indicado do que o comando IF ... ENDIF.

 

Por outro lado, o comando IF ... ELSEIF ... ENDIF pode ser utilizado como substituto do comando DO CASE ... ENDCASE. O seu funcionamento é equivalente: cada CASE corresponde a um ELSEIF e o OTHERWISE ao ELSE.

 

A técnica de indentação deve sempre ser seguida. Cada bloco de instruções deve estar indentado (contido) dentro de um CASE, conforme ilustrado no exemplo a seguir.

 

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

 

DO CASE

         CASE nSalario > 12000 .AND. nSalario < 20000

                    nDescont := nSalario * 0.10

 

         CASE nSalario >= 20000 .AND. nSalario < 40000

                    nDescont := nSalario * 0.15

 

         CASE nSalario >= 40000 .AND. nSalario < 60000

                    nDescont := nSalario * 0.20

 

         CASE nSalario >= 60000 .AND. nSalario < 90000

                    nDescont := nSalario * 0.25

 

         CASE nSalario >= 90000 .AND. nSalario < 150000

                    nDescont := nSalario * 0.30

 

         CASE nSalario >= 150000 .AND. nSalario < 200000

                    nDescont := nSalario * 0.40

 

         OTHERWISE

                    nDescont := nSalario * 0.50

ENDCASE

 

RETURN nDescont