Les opérations de contrôle de flux incluent
le branchement et la condition.
La figure 4 montre les codes opération
en format fixe dans cette catégorie
pour lesquels il n'y a pas de support du
format libre, et les alternatives en format
libre.
Si vos programmes sont de
conception structurée, ils
ne comportent
pas de combinaison GoTo et Tag ni
de codes opération Cabxx. Il faut éviter
ces codes opération même en RPG en
format fixe et écrire plutôt du code
structuré. Le manque de support de
ces codes opération est un autre
exemple où le format libre oblige à de
meilleures pratiques de programmation.
Voyons l’une de ces améliorations
de style imposée par le fait qu’un code
opération ne permet pas le format
libre. Soit les deux instructions CasGT
suivantes :
C HrsWorked CasGT 40
CalcOTPay
If HrsWorked > 40;
ExSr Calc0tPay;
EndIf;
Le format libre donne trois lignes
de code au lieu d'une seule, mais l'objectif
n'est pas de faire le maximum
avec le minimum de lignes de code. Il
est d'écrire un code compréhensible,
ce que fait sans aucun doute la version
en format libre.
Avec le RPG en format libre, on ne
peut plus utiliser le code opération Do,
qu'il faut remplacer par For.
Examinons un code fonctionnellement
équivalent pour le RPG en format
fixe et en format libre, respectivement :
C StartVal Do EndVal Index
C ExSr Process
C EndDo IncVal
For Index = StartVal To EndVal By IncVal;
ExSr Process;
EndFor;
Même avec les noms de variables
qui indiquent leur fonction, la version
en format fixe est difficile à lire.
Imaginons ce bloc de code avec des
noms de variables moins indicatifs.
Ajoutons à cela le fait que la valeur
d'incrément apparaît sur l'instruction
EndDo, et on obtient un code pas
intuitif du tout. Par comparaison, la
version en format libre est simple et
directe.
Dans un environnement classique,
il est probable qu'on verra bien moins
de structures Do/EndDo bénéficiant
des nombreuses fonctions facultatives
de ce code opération (par exemple, valeur
de l'index de départ, valeur d'incrément)
que celles qui ne le font pas.
En réalité, on rencontrera plutôt ce
genre de code :
C Do NbrLoops
C ExSr Process
C EndDo
Il s'exécute simplement un certain
nombre de fois (NbrLoops). En coulisse,
le système utilise une valeur de
départ par défaut de 1, une valeur de
fin par défaut égale à la valeur dans la
variable NbrLoops, et une valeur d'incrément
par défaut de 1 qui sert à incrémenter
un index interne temporaire.
Le RPG en format libre ne fournit
pas un mécanisme avec un tel risque
potentiel de défauts. Voici une structure
For/EndFor équivalente :
For Counter = 1 To NbrLoops;
ExSr Process;
EndFor;
Pour améliorer les codes opération
restants (Ifxx, DoUxx, DoWxx,
Whenxx, Andxx, Orxx), déplacez la
comparaison (c'est-à -dire la portion xx
du code opération) dans l'expression.
Soit l'exemple suivant :
C LName IfEq _Guthrie
C FName AndEq _Gary
C ExSr RaisePay
C EndIf
Examinons maintenant l'exemple
plus clair suivant :
C If LName = _Guthrie And
C FName = _Gary
C ExSr RaisePay
C EndIf
C'est une nette amélioration.
Voyons la version en format libre :
If LName = _Guthrie And FName = _Gary;
ExSr RaisePay;
EndIf;
J'aime celle-ci encore plus, et parce
que le RPG en format libre vous oblige
à utiliser cette forme, il favorise à nouveau
de meilleures pratiques de programmation.
Téléchargez cette ressource
Gagner en cyber-résilience avec Insight & Bitdefender
Dans un environnement en constante mutation, où les cyberattaques deviennent plus nombreuses et plus sophistiquées, et où les SI se complexifient par la multiplication des offres SaaS et le multi cloud, les entreprises doivent repenser leur approche de la cybersécurité et faire évoluer leurs bonnes pratiques. Comment gagner en Cyber résilience ?