EVALUATE
L'instruction EVALUATE est l'équivalent COBOL du switch / case présent dans la plupart des langages modernes. Elle permet de tester une variable (ou une expression) contre plusieurs valeurs ou conditions possibles et d'exécuter le bloc correspondant. Elle est souvent plus lisible et plus performante que de multiples IF imbriqués.
Exemple de code : Menu de choix avec note scolaire
IDENTIFICATION DIVISION.
PROGRAM-ID. EVALUATE-EXEMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NOTE PIC 99 VALUE ZERO.
01 APPRECIATION PIC X(30).
PROCEDURE DIVISION.
DISPLAY "Entrez une note sur 20 (0-20) : ".
ACCEPT NOTE.
EVALUATE TRUE
WHEN NOTE >= 16
MOVE "Excellent !" TO APPRECIATION
WHEN NOTE >= 14
MOVE "Très bien" TO APPRECIATION
WHEN NOTE >= 12
MOVE "Bien" TO APPRECIATION
WHEN NOTE >= 10
MOVE "Assez bien" TO APPRECIATION
WHEN NOTE >= 8
MOVE "Passable" TO APPRECIATION
WHEN OTHER
MOVE "Insuffisant - Redoublement" TO APPRECIATION
END-EVALUATE.
DISPLAY "Note : " NOTE "/20".
DISPLAY "Appréciation : " APPRECIATION.
STOP RUN.
Télécharger le code
Résultat attendu à l'exécution (exemples)
Entrée : 17
Entrez une note sur 20 (0-20) :
17
Note : 17/20
Appréciation : Excellent !
Entrée : 11
Entrez une note sur 20 (0-20) :
11
Note : 11/20
Appréciation : Assez bien
Entrée : 6
Entrez une note sur 20 (0-20) :
6
Note : 06/20
Appréciation : Insuffisant - Redoublement
Explication détaillée – focus sur EVALUATE
EVALUATE TRUE
Ici on utilise la forme la plus courante :EVALUATE TRUE.
Cela permet de tester plusieurs conditions (WHENcondition) dans l'ordre.
Dès qu'une condition est vraie, le bloc correspondant s'exécute et on sort de l'EVALUATE(pas de « fall-through » comme en C).WHEN NOTE >= 16
Première condition testée. Si vraie → exécute leMOVEet passe directement à la fin.WHEN OTHER
Équivalent du « default » ou « else ».
Exécuté si aucune des conditions précédentes n'est vraie.
Très utile pour capturer les cas imprévus.END-EVALUATE.
Obligatoire pour fermer le bloc (commeEND-IF).
Bonne pratique : toujours l'utiliser dans le COBOL moderne.- Autres formes possibles (non montrées ici) :
•EVALUATE variableWHEN valeur1 WHEN valeur2 …
•WHENcondition1 AND condition2
•WHEN10 THRU 15 (plage inclusive)
Avantages de
• Plus lisible quand il y a 4 cas ou plus
• Évite les imbrications profondes
• Meilleure performance dans certains compilateurs
• Structure claire et maintenable
EVALUATE par rapport à plusieurs IF :• Plus lisible quand il y a 4 cas ou plus
• Évite les imbrications profondes
• Meilleure performance dans certains compilateurs
• Structure claire et maintenable
Prochain sujet : Boucles avec PERFORM … UNTIL, VARYING et PERFORM paragraphe.