Bonjour à tous,
Dans cet article nous allons nous pencher sur les opérateurs de comparaison que propose le langage ABAP. Nous verrons qu’à l’instar des autres langages, nous disposons des comparateurs habituels. Mais l’ABAP innove en en fournissant d’autres plus originaux.
Les opérateurs de chaînes de caractères
Pour commencer, une liste des opérateurs de comparaison de chaînes de caractères. C’est ici que les originalités se situent…
- CO : pour « contains only ». Retourne true si l’opérande 1 (de gauche) ne contient que des caractères de l’opérande 2 (donc de droite). La casse et les espaces de début et de fin sont prises en compte pour les deux opérandes. Si l’opérande 2 est de type string et est vide, alors l’expression retourne false, à moins que l’opérande 1 soit également une string vide. Grâce à cet opérateur, on peut par exemple déterminer si une chaîne de caractères représente un chiffre. On aurait alors :
IF lv_string CO '0123456789'.
- CN : pour « contains not only ». Basiquement, une telle expression retourne true si CO retourne false et inversement. C’est-à-dire que le résultat est true si l’opérande 1 ne contient pas que des caractères de l’opérande 2.
- CA : pour « contains any ». Ici, l’expression retourne true si l’opérande 1 contient au moins un caractère de l’opérande 2. Cette comparaison est sensible à la casse et aux espaces de début et de fin. Un exemple d’utilisation peut permettre de déterminer si un message est de type succès, avertissement ou information (sachant qu’il pourrait aussi être de type erreur ou abandon). On pourrait alors avoir quelque chose comme
IF message-type CA 'SWI'.
- NA : pour « contains not any ». C’est simplement l’inverse de la précédente.
- CS : pour « contains string ». Cet opérateur permet de vérifier la présence d’une sous-chaîne dans une chaîne de caractère. Cette fois-ci, la casse et les espaces de fin ne sont pas prises en compte. Les espaces de début le sont. Pour l’exemple, mettons-nous dans le contexte des statuts d’opérations commerciales dans le module CRM. Un statut est identifié par son code mais aussi par son schéma. Le schéma est directement lié au type de l’opération commerciale. Un exemple de schéma peut être « ZINT_ET ». Un statut sera complètement identifié par le couple « E0003ZINT_ET », où E003 est l’identifiant du message. Ainsi, on peut imaginer un code ABAP qui filtrera des statuts selon leur schéma.
IF ls_status-stsma CS 'ZINT_ET'
. - NS : pour « contains no string ». Là encore, c’est l’inverse de la précédente.
- CP : pour « covers pattern ». Je crois ne l’avoir jamais utilisé ! Cet opérateur retourne true si le contenu de l’opérande 1 respecte le modèle de l’opérande 2. Des caractères jokers peuvent être utilisés pour former le modèle, où « * » représente n’importe quelle chaîne et « + » représente un seul caractère. La casse n’est pas prise en compte. L’exemple de l’opérateur précédent pourrait très bien être écrit de la sorte :
IF ls_status-stsma CP "*ZINT_ET"
. - NP : pour « no pattern ». Le contraire du précédent…
On voit bien que SAP met à disposition des opérateurs qu’il peut être intéressant d’utiliser, mais avec parcimonie car visuellement leur comportement ne saute pas aux yeux du non initié. Il est également bon de noter que la variable système sy-fdpos
est mise à jour en fonction du résultat des comparaisons. Je laisse au soin du lecteur assidu d’aller regarder l’aide en ligne ABAP pour découvrir cette fonctionnalité parfois bien utile.
Les opérateurs de types numériques
Je classe les opérateurs qui suivent dans la partie numérique, mais il faut savoir qu’ils peuvent également servir pour comparer des chaînes de caractères entre elles (de façon alphabétique), des pointeurs, des structures ou des tables internes. Dans le cas de structures, les champs seront comparés un à un. Pour les tables internes, le nombre de lignes sera comparé et en cas d’égalité chaque ligne sera comparée à la manière des structures.
Il s’agit des comparateurs classiques que tout développeur connaît. Je ne vais pas décrire leur fonctionnement. Et une fois encore, je vous invite à consulter la documentation officielle de ces opérateurs afin d’en apprendre un peu plus sur la façon de comparer des variables de types différents, des pointeurs, etc.
- = ou EQ
- <> ou NE
- < ou LT
- > ou GT
- <= ou LE
- >= ou GE
Je recommande de n’utiliser que les formes habituelles de ces comparateurs, car elles collent mieux à ce qu’un développeur de tout langage s’attend à voir. Ce qui sûr, c’est que l’on choisisse une forme ou l’autre, il faut s’y conformer du début à la fin du programme. Le maître-mot dans le développement est « cohérence ». Choisissez la façon d’écrire qui vous sied le mieux (ou qui répond aux normes de programmation en vigueur au sein du projet) et n’en changez pas.
Pour en terminer avec cet article, je ne peux pas ne pas mentionner qu’il existe des opérateurs de comparaison binaires. Il convient de se référer à la documentation ABAP sur le sujet, car ne les ayant jamais utilisés, je ne me permettrai pas d’en parler ici. Si par hasard vous auriez des exemples concrets de leur utilisation, je suis preneur…