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 blocIF.
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 partieIFé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 conditionsIFetELSEIFprécédentes étaient fausses.
Fonctionnement et déroulement
- Les conditions sont testées strictement de haut en bas (
IFd’abord, puis le premierELSEIF, 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 conditionELSEIFou le blocELSEau sein de la même structureIF...ENDIFne sera testée ou exécutée. - Si toutes les conditions
IFetELSEIFsont fausses (abap_false), le blocELSEest 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èsENDIF, sans exécuter aucun des blocs dans la structureIF.
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_trueouabap_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: 24. 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/ELSEIFIF 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
IFest 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
ENDIFfinal. - 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
CONDetSWITCH.IFreste cependant indispensable pour le contrôle des blocs d’instructions.