par Jeff Yanoviak - Mis en ligne le 20/07/2005 - Publié en Novembre 2004
Excepté les îles Galapagos, peu de choses démontrent autant la diversité de
l'évolution que les techniques de coding rencontrées en visitant des sites en
Europe. La boîtes à outils de programmation de l'iSeries offre pléthore d'outils
nous permettant de réaliser le même travail de plusieurs manières, plus ou
moins élégantes.
Depuis l'origine d'ILE, les pointeurs de procédure nous accompagnent. Ils
sont un peu comme le mouton noir de la famille : on ne les voit pas souvent.
C'est dommage car ils ont beaucoup à offrir sur le plan de la dynamique et de
la souplesse ...Cet article donne un exemple pratique d'utilisation des pointeurs de procédure.
Il contient aussi des éléments applicables dans de plus grandes applications.
Mon exemple présente les pointeurs de procédure, démontre leur
souplesse et stocke nettement tout le code de touches de fonction dans un
bloc de code visible, accessible, facile à
maintenir, à la fin du module. De sorte que
les procédures n'encombrent pas le corps
du module principal.
Externaliser les touches de fonctions
Que ceux d’entre vous qui ne sont pas familiarisés
avec les pointeurs sachent qu’ils
les utilisent pourtant depuis longtemps.
Quand on définit un champ,
on définit en réalité un pointeur : statique
certes, mais pointeur quand même. Quand le programme s’exécute, le système
alloue le stockage chargé de contenir la définition du champ et associe
l’adresse de l’emplacement du stockage au nom du champ.
Un pointeur est une variable dynamique qui peut contenir toute adresse de
stockage choisie pendant l’exécution. Un pointeur de procédure est un
pointeur qui contient l’adresse d’une procédure exécutable (c’est-à -dire un
programme, la procédure principale d’un module, ou l’une de ses sous-procédures) qui est liée au programme en
cours d’exécution.
Si vous définissez Field_A comme un
champ alphabétique de 11 octets initialisé à
« Hello World », il y a quelque part dans le
stockage un emplacement contenant
« Hello World ». Si vous voulez le trouver,
vous pouvez utiliser la fonction intégrée
%Addr (obtenir l’adresse de la variable)
pour l’extraire :
Eval Ptr = %Addr(Field_A)
Si vous voulez déterminer l’emplacement
d’une procédure nommée Proc_A qui
affiche « Hello World », vous pouvez utiliser
la fonction intégrée %PAddr (obtenir
l’adresse de procédure) :
Eval Ptr = %PAddr('Proc_A')
Il existe une différence entre les pointeurs et les pointeurs
de procédure : s’il est vrai que vous n’avez pas besoin
de définir les variables pointeur dans le code, vous devez définir
les pointeurs de procédure comme type procptr – c’est
un champ de 16 octets indiqué par un astérisque
(*) dans la colonne 40 de votre carte
D.
roc (provenant de l’exemple ci-dessus) se
présenterait ainsi :
D Proc S * procptr inz(*null)
Téléchargez cette ressource
Microsoft 365 : 5 erreurs de sécurité
A l’heure où les données des solutions Microsoft 365 sont devenues indispensables au bon fonctionnement de l’entreprise, êtes-vous certain de pouvoir compter sur votre plan de sécurité des données et de sauvegarde des identités ? Découvrez le Top 5 des erreurs à ne pas commettre et les meilleures pratiques recommandées par les Experts DIB France.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Du Cloud-first au Cloud-right : bâtir les fondations de l’IA en entreprise
- Cybercriminalité : abus des plateformes légitimes
- Compétence transversale ou matière à part entière : quelle place pour la cybersécurité à l’école ?
- Plus de femmes dirigeantes dans la tech pour la culture d’entreprise et l’inclusion
- Agents IA : de l’expérimentation à la gouvernance, le nouveau rôle des CTO
