Implementing Conditional Logic

Objective

After completing this lesson, you will be able to implementar lógica condicional em um programa ABAP

Implementar ramificação condicional

Ramificação condicional: implementação

As palavras-chave IF, ELSEIF, ELSE e ENDIF podem ser utilizadas para implementar a ramificação condicional na codificação ABAP

A ramificação condicional é uma estrutura de controle que permite tornar a execução do código dependente de condições lógicas.

A ramificação condicional mais comum consiste em um par de palavras-chave, IF e ENDIF. O bloco de código ABAP entre IF e ENDIF só é executado se a condição após IF for cumprida.

Você pode adicionar mais blocos de código ampliando o IF . . ENDIF estrutura por um utilizando a palavra-chave ELSE e um número arbitrário de blocos utilizando a palavra-chave ELSEIF. Ao adicionar a palavra-chave ELSE, você garante que exatamente um dos blocos de código ABAP é sempre executado. Se ELSE estiver em falta, nenhum dos blocos de código ABAP pode ser executado.

Cada IF . . ENDIF palavras-chave são obrigatórias e cada IF deve ter um ENDIF.

O bloco de codificação ABAP que é executado é o seguinte:

  • Primeiro, a condição IF é avaliada. Se preenchido, o bloco de código ABAP relacionado é executado e o programa continua após ENDIF.
  • Somente se a condição IF não for cumprida será a condição após a primeira avaliação ELSEIF. Se preenchido, o bloco de código relacionado é executado e o programa continua após ENDIF.

  • Isto é efetuado consecutivamente para todas as condições ELSEIF. Se nenhuma das condições for cumprida e a estrutura contiver ELSE, o bloco de código ABAP após ELSE é executado. Caso contrário, nenhum dos blocos de código ABAP é executado.

Dica

Ao contrário de muitas outras linguagens de programação, o ABAP requer um delimitador (.) após cada condição lógica e mesmo após a palavra-chave ELSE.

Condições lógicas

Lista de palavras-chave para criar condições lógicas com três exemplos de implementação

As condições lógicas são uma combinação de comparações, operações lógicas, expressões e funções que o sistema de tempo de execução avalia para decidir se a condição é verdadeira ou falsa.

O caso de utilização mais comum para condições lógicas é após as palavras-chave IF ou ELSEIF em um IF . . . ENDIF estrutura.

O primeiro exemplo (na figura acima) é uma comparação simples: a condição é verdadeira se os dois objetos de dados, x e y, tiverem o mesmo valor.

O segundo exemplo (na figura acima) é um pouco mais sofisticado: ou o valor de x é maior ou igual a y e menor que o dobro do valor de y, ou é menor ou igual a y e maior que o dobro do valor de y.

O terceiro exemplo (na figura acima) faz uso da função aritmética abs( ) e da expressão lógica BETWEEN <expression 1> AND <expression 2>. A condição é verdadeira se o valor absoluto de x estiver entre o valor absoluto de y e o valor absoluto de duas vezes y.

Para comparações de valores simples, você pode utilizar os operadores =, <>, >, <, >=, and <=. Você pode comparar os valores de não só objetos de dados, mas também muitas outras expressões, como a expressão aritmética 2 * y no exemplo acima.

Nota

O ABAP utiliza o mesmo símbolo (=) para avaliações e comparações de valores. A distinção é feita com base na posição.

Operadores e significados

OperadorSignificado
AND

Usado para unir várias expressões lógicas para criar uma nova expressão lógica que só é verdadeira quando todas as várias expressões lógicas são verdadeiras.

OR

Usado para unir várias expressões lógicas para criar uma nova expressão lógica que é verdadeira se pelo menos uma das expressões lógicas for verdadeira.

NOT

A negação de uma expressão lógica usando NOT cria uma nova expressão lógica que é falsa se a expressão lógica for verdadeira e vice-versa.

Você pode usar os operadores AND e OR para combinar expressões lógicas e o operador NOT para negar uma expressão. Sem parênteses, NÃO se liga mais forte que AND e AND mais forte que OR.

O ABAP conhece algumas expressões lógicas especiais:

  • <data object> IS INITIAL é verdadeiro se <data object>contiver seu valor específico de tipo
  • <data object> NÃO É INICIAL é verdadeiro se <data object> contiver um valor diferente do valor inicial específico do tipo
  • <data object> ENTRE <expression 1> E <expression 2>

Algumas funções ABAP especiais são funções predicadas.  Isso significa que eles próprios são condições lógicas. Por exemplo, Contains( ) é uma função que compara valores em forma de caractere.

Implementar uma instrução IF

Exemplo de negócio

Usando o IF ... ENDIF palavras-chave que os usuários podem querer criar e avaliar as condições lógicas em um programa ABAP e emitir os resultados. Crie um novo programa de aplicação, utilize as palavras-chave IF, ELSE e ENDIF e emita o resultado.

Nota

Neste exercício XX se refere ao seu número.

Etapas

  1. Crie uma nova classe ABAP ZCL_S4D100_XX_COND com a interface IF_OO_ADT_CLASSRUN.

    1. Crie uma nova classe ABAP com o nome ZCL_S4D100_XX_COND e adicione a interface IF_OO_ADT_CLASSRUN.

    2. Atribua-o ao seu pacote e vincule-o à sua solicitação de transporte.

  2. Ative a aplicação.

    1. Pressione Ativar (Ctrl+F3).

  3. No METHOD IF_OO_ADT_CLASSRUN~MAIN, defina uma constante C_NUMBER0 com um valor inicial de 0. Use uma instrução IF para emitir uma mensagem quando o valor da constante for zero ou não.

    1. Implemente o seguinte código em METHOD IF_OO_ADT_CLASSRUN~MAIN.

      Code Snippet
      1234567891011
      CONSTANTS: c_number0 TYPE i VALUE 0. out->write( '-----------------------------' ). out->write( 'Example 1: IF...ELSE...ENDIF' ). out->write( '-----------------------------' ). IF c_number0 = 0. out->write( 'The value of c_number0 equels zero' ). ELSE. out->write( 'The value of c_number0 equels some numer other than zero' ). ENDIF.
  4. Ative e teste a classe.

    1. Pressione Ativar (Ctrl+F3).

    2. Pressione F9 para executar a classe.

    Praticar

Declarações de caso

Palavras-chave CASE, WHEN, WHEN OTHERS e ENDCASE também podem ser usadas para implementar ramificações condicionais

Uma segunda técnica para ramificação condicional é a CASE . . . WHEN . . . ENDCASE estrutura de controle.

Ramificação condicional com CASE . . . ENDCASE é um caso especial da ramificação mais geral com IF . . . ENDIF. Você pode utilizar CASE em situações em que a ramificação depende do valor de um único objeto de dados, que você compara consecutivamente a um conjunto de valores possíveis, utilizando uma comparação igual a cada vez.

No exemplo acima, o valor do objeto de dados ‘número’ é comparado aos valores 1 e 2. Se o valor for igual a 1, <code_block_1> será executado e, se o valor for igual a 2, <code_block_2> será executado. Para qualquer outro valor, o bloco de código após WHEN OTHERS é executado.

Qualquer ramificação condicional com CASE ... ENDCASE pode ser implementado dentro de um IF ... ENDIF estrutura também. Isso é ilustrado no exemplo acima à direita.

Processar cadeias de caracteres

Exemplo de negócio

Você tem o nome completo de um cliente, mas deve exibir o primeiro nome. Crie a codificação ABAP para dividir o nome completo em primeiro nome e sobrenome e enviar o primeiro nome para o console.

Nota

Neste exercício XX se refere ao seu número.

Etapas

  1. Crie a classe ZCL_S4D100_XX_COND para ZCL_S4D100_XX_CASE.

    1. Expanda CLASS ZLCOAL no Project Explorer.

    2. Clique com o botão direito do mouse no pacote ZS4D100_XX e selecione Novaclasse ABAP.

    3. Em Nome, insira ZCL_S4D100_XX_CHAR.

    4. Em Descrição: insira Cadeia de caracteres.

    5. Selecione Adicionar para adicionar a interface IF_OO_ADT_CLASSRUN.

    6. Selecione OK.

    7. Selecione Avançar.

    8. Selecione sua ordem de transporte e pressione Concluir.

    9. Pressione Ativar (Ctrl+F3).

  2. Modifique o código em if_oo_adt_classrun~main para utilizar uma instrução CASE em vez de uma instrução IF para verificar se c_number0 é inicial ou não.

    1. Implemente o METHOD IF_OO_ADT_CLASSRUN~MAIN. com o seguinte código:

      Code Snippet
      1234567
      DATA: lv_full_name TYPE string VALUE 'Stan Wilson', lv_first_name TYPE string, lv_last_name TYPE string. SPLIT lv_full_name AT '' INTO lv_first_name lv_last_name. out->write( |user { lv_first_name }| ).
  3. Ative e teste o programa.

    1. Pressione Ativar (Ctrl+F3).

    2. Pressione F9 para executar a classe.

    Praticar