Implementing Conditional Logic

Objective

After completing this lesson, you will be able to implémentation d'une logique conditionnelle dans un programme ABAP

Implémenter ramification conditionnelle

Branchement conditionnel : implémentation

Les mots-clés IF, ELSEIF, ELSE et ENDIF peuvent être utilisés pour implémenter une branche conditionnelle dans le code ABAP.

La branche conditionnelle est une structure de contrôle qui vous permet de rendre l'exécution du code dépendante de conditions logiques.

La branche conditionnelle la plus courante est constituée d'une paire de mots-clés, IF et ENDIF. Le bloc de code ABAP entre IF et ENDIF est exécuté uniquement si la condition après IF est remplie.

Vous pouvez ajouter d'autres blocs de code étendant l' IF . . ENDIF structure par un en utilisant le mot-clé ELSE et un nombre arbitraire de blocs à l'aide du mot-clé ELSEIF. En ajoutant le mot-clé ELSE, vous vous assurez qu'un seul des blocs de code ABAP est toujours exécuté. Si ELSE est manquant, aucun des blocs de code ABAP ne peut être exécuté.

Chaque SI.. Les mots-clés ENDIF sont obligatoires et chaque IF doit avoir un ENDIF.

Le bloc de code ABAP exécuté est le suivant :

  • Tout d'abord, la condition IF est évaluée. Si la condition est remplie, le bloc de code ABAP correspondant est exécuté et le programme continue après l'ENDIF.
  • La condition après la première évaluation ELSEIF n'est remplie que si la condition IF n'est pas remplie. Si la condition est remplie, le bloc de code correspondant est exécuté et le programme continue après ENDIF.

  • Cette opération est effectuée consécutivement pour toutes les conditions ELSEIF. Si aucune des conditions n'est remplie et que la structure contient ELSE, le bloc de code ABAP après ELSE est exécuté. Sinon, aucun des blocs de code ABAP n'est exécuté.

Astuce

Contrairement à de nombreux autres langages de programmation, ABAP requiert un séparateur (.) après chaque condition logique et même après le mot-clé ELSE.

Conditions logiques

Liste de mots-clés pour créer des conditions logiques avec trois exemples d'implémentation

Les conditions logiques sont une combinaison de comparaisons, d'opérations logiques, d'expressions et de fonctions que le système d'exécution évalue pour décider si la condition est vraie ou fausse.

Le cas d'utilisation le plus courant pour les conditions logiques est après les mots-clés IF ou ELSEIF dans IF . . . . ENDIF structure.

Le premier exemple (dans la figure ci-dessus) est une comparaison simple : la condition est vraie si les deux objets de données, x et y, ont la même valeur.

Le deuxième example (sur la figure ci-dessus) est un peu plus sophistiqué: soit la valeur de x est supérieure ou égale à y et inférieure à deux fois la valeur de y, soit elle est inférieure ou égale à y et supérieure à deux fois la valeur de y.

Le troisième exemple (dans la figure ci-dessus) utilise la fonction arithmétique abs( ) et l'expression logique BETWEEN <expression 1> AND <expression 2>. La condition est vraie si la valeur absolue de x est comprise entre la valeur absolue de y et la valeur absolue de deux fois y.

Pour des comparaisons de valeurs simples, vous pouvez utiliser les opérateurs =, <>, >, <, >=, and <=. Vous pouvez comparer les valeurs non seulement des objets de données, mais aussi de nombreuses autres expressions, comme l'expression arithmétique 2 * y dans l'exemple ci-dessus.

Remarque

ABAP utilise le même symbole (=) pour les valorisations et les comparaisons de valeurs. La distinction est faite en fonction de la position.

Opérateurs et significations

OpérateurSignification
AND

Utilisé pour joindre plusieurs expressions logiques afin de créer une nouvelle expression logique qui est vraie uniquement lorsque toutes les expressions logiques multiples sont vraies.

OR

Utilisé pour joindre plusieurs expressions logiques afin de créer une nouvelle expression logique qui est vraie si au moins une des expressions logiques est vraie.

NOT

La négation d'une expression logique à l'aide de NOT crée une nouvelle expression logique qui est fausse si l'expression logique est vraie et vice versa.

Vous pouvez utiliser les opérateurs AND et OR pour combiner des expressions logiques et l'opérateur NOT pour nier une expression. Sans parenthèses, NE LIT PAS plus fort que ET et ET plus fort que OR.

ABAP connaît certaines expressions logiques spéciales :

  • <data object> IS INITIAL est vrai si <data object>contient sa valeur spécifique au type
  • <data object> IS NOT INITIAL est vrai si <data object> contient une valeur différente de la valeur initiale spécifique au type.
  • <data object> ENTRE <expression 1> ET <expression 2>

Certaines fonctions ABAP spéciales sont des fonctions de prédicat.  Cela signifie qu'il s'agit de conditions logiques elles-mêmes. Par exemple, Contains( ) est une fonction qui compare des valeurs alphanumériques.

Implémenter une instruction IF

Scénario de gestion

Utilisation de IF... ENDIF mots-clés que les utilisateurs peuvent souhaiter créer et analyser les conditions logiques dans un programme ABAP et éditer les résultats. Créez un nouveau programme d'application et utilisez les mots-clés IF, ELSE et ENDIF et éditez le résultat.

Remarque

Dans cet exercice, XX fait référence à votre numéro.

Étapes

  1. Créez une classe ABAP ZCL_S4D100_XX_COND avec l'interface IF_OO_ADT_CLASSRUN.

    1. Créez une classe ABAP nommée ZCL_S4D100_XX_COND et ajoutez l'interface IF_OO_ADT_CLASSRUN.

    2. Affectez-le à votre package et liez-le à votre ordre de transport.

  2. Activez l'application.

    1. Appuyez sur Activer (Ctrl+F3).

  3. Dans la MÉTHODE IF_OO_ADT_CLASSRUN~MAIN, définissez une constante C_NUMBER0 avec une valeur initiale de 0. Utilisez une instruction IF pour éditer un message lorsque la valeur de la constante est nulle ou non.

    1. Implémentez le code suivant dans 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. Activez et testez la classe.

    1. Appuyez sur Activer (Ctrl+F3).

    2. Appuyez sur F9 pour exécuter la classe.

    S'entraîner

Déclarations de cas

Les mots-clés CASE, WHEN, WHEN OTHERS et ENDCASE peuvent également être utilisés pour implémenter une branche conditionnelle.

Une deuxième technique de branchement conditionnel est le CASE... WHEN... Structure de contrôle ENDCASE.

branchement conditionnel avec CASE . . . ENDCASE est un cas particulier de la ramification plus générale avec IF... ENDIF. Vous pouvez utiliser CASE dans les situations où la branche dépend de la valeur d'un objet de données individuel, que vous comparez consécutivement à un ensemble de valeurs possibles, en utilisant une comparaison égale à chaque fois.

Dans l'exemple ci-dessus, la valeur de l'objet de données "nombre" est comparée aux valeurs 1 et 2. Si la valeur est égale à 1, <code_block_1> est exécutée et si la valeur est égale à 2, <code_block_2> est exécutée à la place. Pour toute autre valeur, le bloc de code après WHEN OTHERS est exécuté.

Toute branche conditionnelle avec CASE ... ENDCASE peut être implémenté au sein d'un IF ... ENDIF structure également. Ceci est illustré dans l'exemple ci-dessus à droite.

Traiter chaînes de caractères

Scénario de gestion

Vous avez le nom complet d'un client, mais vous devez afficher le prénom. Créez le code ABAP pour fractionner le nom complet en prénom et nom de famille et éditer le prénom dans la console.

Remarque

Dans cet exercice, XX fait référence à votre numéro.

Étapes

  1. Créez la classe ZCL_S4D100_XX_COND dans ZCL_S4D100_XX_CASE.

    1. Développez CLASS ZLCOAL dans l'explorateur de projets.

    2. Cliquez avec le bouton droit de la souris sur le package ZS4D100_XX et sélectionnez Nouvelleclasse ABAP.

    3. Dans Nom, saisissez ZCL_S4D100_XX_CHAR.

    4. Dans Description, saisissez Chaîne de caractères.

    5. Sélectionnez Ajouter pour ajouter l'interface IF_OO_ADT_CLASSRUN.

    6. Cliquez sur OK.

    7. Cliquez sur Next.

    8. Sélectionnez votre ordre de transport et cliquez sur Terminer.

    9. Appuyez sur Activer (Ctrl+F3).

  2. Modifiez le code dans if_oo_adt_classrun~main pour utiliser une instruction CASE plutôt qu'une instruction IF pour vérifier si c_number0 est initial ou non.

    1. Implémentez la méthode IF_OO_ADT_CLASSRUN~MAIN. avec le code suivant :

      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. Activez et testez le programme.

    1. Appuyez sur Activer (Ctrl+F3).

    2. Appuyez sur F9 pour exécuter la classe.

    S'entraîner