> Tech > Opérations de contrôle de flux

Opérations de contrôle de flux

Tech - Par iTPro - Publié le 24 juin 2010
email

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

Opérations de contrôle de flux

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 gratuitement cette ressource

Protection des Données : 10 Best Practices

Protection des Données : 10 Best Practices

Le TOP 10 des meilleures pratiques, processus et solutions de sécurité pour mettre en œuvre une protection efficace des données et limiter au maximum les répercutions d’une violation de données.

Tech - Par iTPro - Publié le 24 juin 2010