par Gary Guthrie
Pour jeter les bases du RPG en format
libre, la V5 augmente le nombre de
fonctions intégrées (BIF, built-in function)
dans le langage. Même si la plupart
des nouvelles venues remplacent
simplement des codes opération existants,
leur arrivée offre d'intéressantes
possibilités d'amélioration du code,
tant en format libre qu'en format fixe.
Comment les BIF améliorent-elles
le code ? En permettant d'utiliser des
expressions faciles à lire. Plus de Factor
1 Ceci, Factor 2 Cela et champ Résultat
Quelque Autre Chose, comme avec
leurs contreparties du code opération
en colonnes. Sans aucun doute, les expressions
sont plus souples, plus intuitives,
et moins sujettes à erreur que les
codes opération RPG qu'elles remplacent.
Retrouvez toutes les figures explicatives dans l'édition papier de cet article : iSeries News Vol.1 Num.3 - Mars 2002
La figure 1 présente une liste des nouvelles
BIF de la V5. On constate que
beaucoup remplacent des codes opération
associés à la date et à l’heure – et
s’il est un jeu de codes opération qui a
besoin d’être remplacé, c’est bien
ceux-là ! Prenons, par exemple,
SubDur (Substract Duration). Comme
on le devine, l’opération calcule une
date, une heure, ou un tampon horodateur
en soustrayant une durée d’une
autre date, heure ou tampon. Mais elle
calcule aussi une durée en soustrayant
une date, heure, ou tampon horodateur
d’un autre. Ce comportement est
tout sauf intuitif.
Plusieurs nouvelles BIF associées à
la date et à l’heure remplacent les
codes opération SubDur et AddDur
(Add Duration). Les trois BIF suivantes
convertissent un nombre en une durée
que l’on peut ajouter ou soustraire
d’une valeur date ou tampon horodateur
:
• %Years (nombre d’années)
• %Months (nombre de mois)
• %Days (nombre de jours)
Quatre autres BIF convertissent un
nombre en une durée que l’on peut
ajouter à ou soustraire d’une valeur
heure ou tampon horodateur. Ce sont
• %Hours (nombre d’heures)
• %Minutes (nombre de minutes)
• %Seconds (nombre de secondes)
• %Mseconds (nombre de microsecondes)
Le code de la figure 2 (en A)
montre des exemples de soustraction
d’une durée pour obtenir une nouvelle
date et d’addition d’une durée pour
obtenir une nouvelle heure. La première
instruction détermine la date de
sortie d’un livre d’une bibliothèque en
soustrayant 14 jours de la date limite
de retour (due date). La seconde instruction
calcule une heure de fin en
ajoutant 8 heures à une heure de départ.
Les BID produisent un code clair,
en parfaite adéquation avec notre manière
de penser.
Pour reproduire la possibilité de
SubDur de soustraire deux dates,
heures ou tampons horodateurs pour
calculer une durée, le RPG ajoute BIF
%Diff (Différence entre deux valeurs
date, heure ou tampon horodateur),
qui accepte trois paramètres. Les deux
premiers sont les opérandes qui
précisent les valeurs date, heure ou
tampon à soustraire. Ces opérandes
doivent être de types compatibles.
Combinaisons correctes :
• deux dates
• deux heures
• deux tampons horodateurs
• date et tampon horodateur (ne
considère que la portion date du
tampon)
• heure et tampon horodateur (ne
considère que la portion heure du
tampon)
Le troisième paramètre indique
l’unité à utiliser pour la durée calculée.
Valeurs correctes :
• pour deux dates ou une date et tampon
horodateur : *Years, *Months,
et *Days
• pour deux heures ou une heure et
tampon horodateur : *Hours,
*Minutes, et *Seconds
• deux tampons horodateurs : *Years,
*Months, *Days, *Hours, *Minutes,
*Seconds, et *Mseconds
Il faut savoir que le résultat est arrondi
par défaut et que tout reste éventuel
est ignoré. Ainsi, 61 minutes =
une heure, tandis que 59 minutes = 0
heure.
Voyons maintenant le code en B. La
première instruction calcule le nombre
de jours entre la date de sortie d’un
livre et la date de restitution, et la seconde
détermine le nombre d’heures
entre une heure de début et une heure
de fin. Sans aucun doute, l’utilisation
de %Diff produit un code simple et
dont l’intention est claire.
La BIF %SubDt (Extraire une portion
d’une date, heure, ou tampon horodateur)
vient remplacer le code opération
Extrct (ExtractDate/Time/
Timestamp). Cette BIF accepte deux
paramètres. Le premier est une valeur
date, heure ou tampon d’où on extrait
l’information. Le second est la portion
que l’on veut extraire. Voici des valeurs
correctes pour le second paramètre :
• pour une date : *Years, *Months, et
*Days
• pour une heure : *Hours, *Minutes,
et *Seconds
• pour un tampon horodateur :
*Years, *Months, *Days, *Hours,
*Minutes, *Seconds, et *Mseconds
Notons que %Days fait toujours référence
au jour du mois, et pas au jour
de l’année (comme l’on pourrait s’y attendre
si l’on utilise le format de date
julienne). De même, *Years renvoie
toujours une année de quatre chiffres
même si l’on utilise un format d’année
à deux chiffres. Deux exemples de
%SubDt apparaissent en C. Le premier
extrait l’année de naissance d’une
date de naissance, et le second extrait
la portion heure de l’heure
courante stockée dans le champ
CurTime.
Trois autres BIF associées à la date
et à l’heure – %Date (Convertir en
date), %Time (Convertir en heure) et
%Timestamp (Convertir en tampon
horodateur) – convertissent des valeurs
caractère, numérique, ou tampon
horodateur en valeurs date, heure, et
tampon horodateur que l’on pourra
ensuite utiliser dans des calculs portant
sur des dates et des heures. On
peut également utiliser ces BIF pour
remplacer le code opération Time
(Extraire l’heure et la date), qui permet
d’extraire la date et l’heure du système
sous diverses formes.
Chacune de ces BIF accepte
deux paramètres : la valeur à
convertir et le format d’entrée.
Indépendamment des formats d’entrée,
ces BIF renvoient toujours l’information
en format ISO (International
Standards Organization). Si l’on ne
précise pas le premier paramètre, la
BIF renvoie la date, l’heure, ou le tampon
horodateur du système courant
approprié pour la BIF en question. On
peut voir en D des exemples de ces
BIF. Les trois premières instructions
extraient la date système courante,
l’heure système courante, et le tampon
horodateur système courant, respectivement.
Les deux instructions suivantes
montrent que l’on peut également
utiliser des mots réservés RPG
(*Date et Udate). On ne spécifie pas de
paramètre de format pour ces mots réservés
parce que le système connaît le
format d’entrée pour ces valeurs. Pas
plus qu’on ne spécifie le paramètre de
format pour les valeurs de tampon horodateur,
comme le montre l’exemple
suivant dans cette section de code.
Les deux dernières instructions
démontrent l’utilisation
du paramètre de format
d’entrée.
Téléchargez cette ressource
Guide inmac wstore pour l’équipement IT de l’entreprise
Découvrez les dernières tendances et solutions IT autour des univers de Poste de travail, Affichage et Collaboration, Impression et Infrastructure, et notre nouveau dossier thématique sur l’éco-conception et les bonnes pratiques à adopter pour réduire votre impact environnemental.