Implementing Conditional Logic

Objective

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

Implementar ramificación condicional

Ramificación condicional: Implementación

Las palabras clave IF, ELSEIF, ELSE y ENDIF se pueden utilizar para implementar la ramificación condicional en el código ABAP

La ramificación condicional es una estructura de control que le permite hacer que la ejecución de código dependa de condiciones lógicas.

La ramificación condicional más común consta de un par de palabras clave, IF y ENDIF. El bloque de código ABAP entre IF y ENDIF solo se ejecuta si se cumple la condición después de IF.

Puede añadir más bloques de código ampliando IF .. ENDIF estructura por uno utilizando la palabra clave ELSE y un número arbitrario de bloques utilizando la palabra clave ELSEIF. Al añadir la palabra clave ELSE, se asegura de que siempre se ejecute exactamente uno de los bloques de código ABAP. Si falta ELSE, no se puede ejecutar ninguno de los bloques de código ABAP.

Cada IF . . Las palabras clave ENDIF son obligatorias y cada IF debe tener un ENDIF.

El bloque de código ABAP que se ejecuta es el siguiente:

  • En primer lugar, se evalúa la condición IF. Si se cumple, se ejecuta el bloque de código ABAP relacionado y el programa continúa después de ENDIF.
  • Solo si la condición IF no se cumple es la condición después de la primera evaluación ELSEIF. Si se cumple, se ejecuta el bloque de códigos relacionado y el programa continúa después de ENDIF.

  • Esto se realiza de forma consecutiva para todas las condiciones ELSEIF. Si no se cumple ninguna de las condiciones y la estructura contiene ELSE, se ejecuta el bloque de código ABAP después de ELSE. De lo contrario, no se ejecuta ninguno de los bloques de código ABAP.

Consejo

A diferencia de muchos otros lenguajes de programación, ABAP requiere un delimitador (.) después de cada condición lógica e incluso después de la palabra clave ELSE.

Condiciones lógicas

Lista de palabras clave para crear condiciones lógicas con tres implementaciones de ejemplo

Las condiciones lógicas son una combinación de comparaciones, operaciones lógicas, expresiones y funciones que evalúa el sistema de tiempo de ejecución para decidir si la condición es verdadera o falsa.

El caso de uso más común para condiciones lógicas es después de las palabras clave IF o ELSEIF en IF . . . . Estructura ENDIF.

El primer ejemplo (en la figura anterior) es una comparación simple: la condición es verdadera si los dos objetos de datos, x e y, tienen el mismo valor.

El segundo ejemplo (en la figura anterior) es un poco más sofisticado: o bien el valor de x es mayor o igual a y y menor que el doble del valor de y, o es menor o igual a y y mayor que el doble del valor de y.

El tercer ejemplo (en la figura anterior) hace uso de la función abs( ) aritmética y la expresión BETWEEN <expression 1> AND <expression 2>. lógica La condición es verdadera si el valor absoluto de x se encuentra entre el valor absoluto de y y el valor absoluto de dos veces y.

Para comparaciones de valores simples, puede utilizar los operadores =, <>, >, <, >=, and <=. Puede comparar los valores no solo de objetos de datos, sino también de muchas otras expresiones, como la expresión aritmética 2 * y en el ejemplo anterior.

Nota

ABAP utiliza el mismo símbolo (=) para valoraciones y comparaciones de valores. La distinción se realiza en función de la posición.

Operadores y significados

OperadorSignificado
AND

Se utiliza para unir varias expresiones lógicas para crear una nueva expresión lógica que es verdadera solo cuando todas las expresiones lógicas múltiples son verdaderas.

OR

Se utiliza para unir varias expresiones lógicas para crear una nueva expresión lógica que es verdadera si al menos una de las expresiones lógicas es verdadera.

NOT

La negación de una expresión lógica mediante NOT crea una nueva expresión lógica que es falsa si la expresión lógica es verdadera y viceversa.

Puede utilizar los operadores AND y OR para combinar expresiones lógicas y el operador NOT para negar una expresión. Sin corchetes, NO se une más fuerte que AND y AND más fuerte que OR.

ABAP conoce algunas expresiones lógicas especiales:

  • <data object> IS INITIAL es verdadero si <data object>contiene su valor específico de tipo
  • <data object> NO ES INICIAL es verdadero si <data object> contiene un valor que es diferente del valor inicial específico del tipo
  • <data object> ENTRE <expression 1> Y <expression 2>

Algunas funciones ABAP especiales son funciones de predicado.  Esto significa que son condiciones lógicas por sí mismas. Por ejemplo, Contains( ) es una función que compara valores alfanuméricos.

Implementar una sentencia IF

Ejemplo empresarial

Utilizando IF ... ENDIF palabras clave que los usuarios deseen crear y evaluar las condiciones lógicas en un programa ABAP y emitir los resultados. Cree un nuevo programa de aplicación y utilice las palabras clave IF, ELSE y ENDIF y emita el resultado.

Nota

En este ejercicio XX hace referencia a su número.

Pasos

  1. Cree una nueva clase ABAP ZCL_S4D100_XX_COND con la interfaz IF_OO_ADT_CLASSRUN.

    1. Cree una nueva clase ABAP con el nombre ZCL_S4D100_XX_COND y añada la interfaz IF_OO_ADT_CLASSRUN.

    2. Asígnelo a su paquete y vincúlelo a su orden de transporte.

  2. Active la aplicación.

    1. Pulse Activar (Ctrl+F3).

  3. En el MÉTODO IF_OO_ADT_CLASSRUN~MAIN, defina una constante, C_NUMBER0 con un valor inicial de 0. Utilice una sentencia IF para emitir un mensaje cuando el valor de la constante sea cero o no.

    1. Implemente el siguiente código en 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. Active y pruebe la clase.

    1. Pulse Activar (Ctrl+F3).

    2. Pulse F9 para ejecutar la clase.

    Practicar

Declaraciones de caso

Las palabras clave CASE, WHEN, WHEN OTHERS y ENDCASE también se pueden utilizar para implementar la ramificación condicional

Una segunda técnica para la ramificación condicional es el CASE... WHEN . . . . ENDCASE estructura de control.

Ramificación condicional con CASE . . . . ENDCASE es un caso especial de la ramificación más general con IF . . . . ENDIF. Puede utilizar CASE en situaciones en las que la ramificación depende del valor de un objeto de datos individual, que se compara consecutivamente con un conjunto de valores posibles, utilizando una comparación igual cada vez.

En el ejemplo anterior, el valor del objeto de datos "número" se compara con los valores 1 y 2. Si el valor es igual a 1, se ejecuta <code_block_1> y si el valor es igual a 2, se ejecuta <code_block_2> en su lugar. Para cualquier otro valor, se ejecuta el bloque de código después de WHEN OTHERS.

Cualquier ramificación condicional con CASE ... ENDCASE podría implementarse dentro de un IF ... Estructura ENDIF también. Esto se ilustra en el ejemplo anterior de la derecha.

Procesar strings de caracteres

Ejemplo empresarial

Tiene el nombre completo de un cliente, pero debe visualizar el nombre. Cree el código ABAP para dividir el nombre completo en nombre y apellido y emita el nombre en la consola.

Nota

En este ejercicio XX hace referencia a su número.

Pasos

  1. Cree la clase ZCL_S4D100_XX_COND para ZCL_S4D100_XX_CASE.

    1. Despliegue CLASS ZLCOAL en el Explorador de proyectos.

    2. Haga clic con el botón derecho en el paquete ZS4D100_XX y seleccione Nuevaclase ABAP.

    3. En Nombre, introduzca ZCL_S4D100_XX_CHAR.

    4. En Descripción: introduzca Cadena de caracteres.

    5. Seleccione Añadir para añadir la interfaz IF_OO_ADT_CLASSRUN.

    6. Seleccione OK.

    7. Seleccione Siguiente.

    8. Seleccione su orden de transporte y pulse Finalizar.

    9. Pulse Activar (Ctrl+F3).

  2. Modifique el código en if_oo_adt_classrun~main para utilizar una sentencia CASE en lugar de una sentencia IF para verificar si c_number0 es inicial o no.

    1. Implemente el MÉTODO IF_OO_ADT_CLASSRUN~MAIN. con el siguiente 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. Active y pruebe el programa.

    1. Pulse Activar (Ctrl+F3).

    2. Pulse F9 para ejecutar la clase.

    Practicar