Instruction IF ABAP : Contrôle conditionnel du flux du programme

Catégorie
ABAP-Statements
Publié
Auteur
Johannes

L’instruction IF est la structure de contrôle centrale en ABAP pour gérer le flux du programme en fonction de conditions. Elle permet d’exécuter un ou plusieurs blocs d’instructions uniquement lorsqu’une certaine ** condition logique** est remplie (vraie). On peut ainsi créer des branchements dans le déroulement du programme pour réagir à différentes situations ou états de données.

Syntaxe

L’instruction IF existe en différentes variantes :

1. Condition IF simple (sans alternative)

IF <logischer_ausdruck>.
" Anweisungsblock 1
" Dieser Block wird nur ausgeführt, wenn <logischer_ausdruck> wahr ist.
[Anweisung1_1].
[Anweisung1_2].
...
ENDIF.
  • IF : Introduit le test de condition.
  • <logischer_ausdruck> : Une condition qui est évaluée à vrai (abap_true) ou faux (abap_false).
  • ENDIF : Ferme le bloc IF.

2. Condition IF avec alternative (ELSE)

IF <logischer_ausdruck>.
" Anweisungsblock 1 (Wenn wahr)
...
ELSE.
" Anweisungsblock 2 (Wenn falsch)
...
ENDIF.
  • ELSE : Introduit le bloc qui est exécuté lorsque le <logischer_ausdruck> dans la partie IF était faux.

3. Condition IF avec plusieurs alternatives (ELSEIF) et ELSE optionnel

IF <logischer_ausdruck_1>.
" Anweisungsblock 1 (Wenn Ausdruck 1 wahr ist)
...
ELSEIF <logischer_ausdruck_2>.
" Anweisungsblock 2 (Wenn Ausdruck 1 falsch WAR und Ausdruck 2 wahr ist)
...
ELSEIF <logischer_ausdruck_3>.
" Anweisungsblock 3 (Wenn Ausdrücke 1 & 2 falsch WAREN und Ausdruck 3 wahr ist)
...
[ELSE. " Optionaler Block für alle anderen Fälle
" Anweisungsblock N (Wenn ALLE vorherigen Ausdrücke falsch waren)
...]
ENDIF.
  • ELSEIF : Teste une autre condition, mais seulement si toutes les conditions IF et ELSEIF précédentes étaient fausses.

Fonctionnement et déroulement

  • Les conditions sont testées strictement de haut en bas (IF d’abord, puis le premier ELSEIF, puis le deuxième, etc.).
  • Dès qu’une condition est reconnue comme vraie (abap_true), le bloc d’instructions associé est exécuté.
  • Très important : Après l’exécution de ce seul bloc, le programme passe **directement à l’instruction après le ENDIF **. Aucune autre condition ELSEIF ou le bloc ELSE au sein de la même structure IF...ENDIF ne sera testée ou exécutée.
  • Si toutes les conditions IF et ELSEIF sont fausses (abap_false), le bloc ELSE est exécuté (s’il existe).
  • Si toutes les conditions sont fausses et qu’il n’y a pas de bloc ELSE, le programme continue simplement avec l’instruction après ENDIF , sans exécuter aucun des blocs dans la structure IF.

Expressions logiques

Le <logischer_ausdruck> peut prendre différentes formes :

  • Comparaisons : =, <>, <, >, <=, >= (par ex. count > 0, text = 'Ja')
  • Tests d’état : var IS INITIAL, ref_var IS BOUND
  • Variables booléennes : is_ok = abap_true
  • Opérateurs logiques pour la combinaison :
    • AND : Les deux sous-expressions doivent être vraies.
    • OR : Au moins une des sous-expressions doit être vraie.
    • NOT : Inverse le résultat de l’expression suivante.
    • Exemple : IF count > 0 AND is_active = abap_true.
  • Fonctions prédicatives : Fonctions qui retournent abap_true ou abap_false (par ex. line_exists(...)).

Imbrication

Les instructions IF peuvent être imbriquées pour construire des arbres de décision plus complexes. Une bonne indentation est essentielle ici pour la lisibilité.

IF condition1.
IF condition2.
" ... "
ENDIF.
ELSE.
" ... "
ENDIF.

Exemples

1. IF simple

DATA quantity TYPE i VALUE 15.
IF quantity > 10.
WRITE / 'Bestellmenge ist größer als 10.'.
ENDIF.

2. IF avec ELSE

DATA user_input TYPE c LENGTH 1.
user_input = 'X'. " Beispielhafte Eingabe
IF user_input = 'J'.
WRITE / 'Benutzer hat Ja gesagt.'.
ELSE.
WRITE / 'Benutzer hat nicht Ja gesagt.'.
ENDIF.

3. IF avec ELSEIF et ELSE

DATA score TYPE i VALUE 75.
DATA grade TYPE c LENGTH 1.
IF score >= 90.
grade = '1'.
ELSEIF score >= 70.
grade = '2'.
ELSEIF score >= 50.
grade = '3'.
ELSE.
grade = '4'.
ENDIF.
WRITE / 'Die Note ist:', grade. " Ausgabe: Die Note ist: 2

4. Condition combinée (AND)

DATA has_permission TYPE abap_bool VALUE abap_true.
DATA is_logged_in TYPE abap_bool VALUE abap_true.
IF has_permission = abap_true AND is_logged_in = abap_true.
WRITE / 'Zugriff gewährt.'.
ELSE.
WRITE / 'Zugriff verweigert.'.
ENDIF.

Différenciation avec CASE

Lorsqu’on veut tester la même variable contre plusieurs valeurs fixes différentes, l’instruction CASE est souvent plus claire qu’une longue chaîne d’instructions IF ... ELSEIF :

DATA transportmittel TYPE c LENGTH 1. " F=Fahrrad, A=Auto, B=Bus
transportmittel = 'A'.
" Mit IF/ELSEIF
IF transportmittel = 'F'.
WRITE / 'Fahrrad gewählt.'.
ELSEIF transportmittel = 'A'.
WRITE / 'Auto gewählt.'.
ELSEIF transportmittel = 'B'.
WRITE / 'Bus gewählt.'.
ELSE.
WRITE / 'Unbekannt.'.
ENDIF.
" Mit CASE (oft lesbarer)
CASE transportmittel.
WHEN 'F'.
WRITE / 'Fahrrad gewählt.'.
WHEN 'A'.
WRITE / 'Auto gewählt.'.
WHEN 'B'.
WRITE / 'Bus gewählt.'.
WHEN OTHERS.
WRITE / 'Unbekannt.'.
ENDCASE.

Remarques importantes / Bonnes pratiques

  • L’instruction IF est fondamentale pour presque tous les programmes ABAP.
  • Veillez à des expressions logiques claires et sans ambiguïté.
  • Utilisez les indentations de manière cohérente pour rendre la structure lisible.
  • N’oubliez jamais le ENDIF final.
  • Pour les affectations purement basées sur des valeurs, il existe dans ABAP moderne (>= 7.40) souvent des alternatives plus compactes comme les opérateurs conditionnels COND et SWITCH. IF reste cependant indispensable pour le contrôle des blocs d’instructions.