4D v16

Pointeurs

Accueil

 
4D v16
Pointeurs

Pointeurs    


 

 

En complément des manipulations expliquées dans la vidéo, il faut noter :

qu’il est assez facile d’utiliser un pointeur.

L’avantage de cette utilisation est de rendre la programmation encore plus générique et adaptable.

L’idée de pointeur est simple et nous l’employons tous les jours dans la conversation courante.

Dans la phrase "mon chien est à la maison" nous utilisons 3 pointeurs, c’est à dire 3 indirections.

En effet "mon chien" ne permet pas de définir le nom ou la race du chien. Il faut savoir "qui parle" pour définir de "quel chien" il s’agit. Idem pour "la maison".

Si Paul s’exclame : "range-le dans ce tiroir"... de quel tiroir s’agit-il ?

Du tiroir que Paul a désigné avec son doigt. Il a donc "pointé" un tiroir que l’interlocuteur va "dépointer" (regarder vers quel tiroir pointe le doigt de Paul).

Ce principe simple est à l’œuvre dans 4D et permet de remplacer les tiroirs par des tables, des champs ou des variables.

Si je demande à 4D de chercher dans cette table, il faudra au préalable que j’aie défini de quelle table il s’agit en la pointant de la manière suivante :

 MonPointeur:=->[TABLE]

Au départ, vous aurez peut-être un peu de mal avec les pointeurs et rapidement, vous constaterez que c’est très simple à mettre en œuvre et d’une puissance considérable.
Les pointeurs sont très souvent utilisés comme paramètres lors des appels de méthodes. Je vous conseille de passer un peu de temps sur ce thème car il vous servira dès que vous commencerez à vous dire :

  • "je vais dupliquer ce bouton"
  • ou "il faut que je recopie et adapte cette méthode".

Quand vous devrez gérer des listes de pointeurs, il sera temps de vous intéresser aux tableaux de pointeurs.

Pensez alors également à la commande Pointeur vers qui vous permettra de définir le nom de pointeurs à partir d'une chaîne de caractères. Par exemple :

 Get pointer("MaVariable"+String($i))

Bonjour,

dans cette vidéo nous allons apprendre ce que sont les pointeurs, optimiser leur programmation et la rendre générique.

Nous l’avons vu à l’exercice précédent, il peut être fastidieux de paramétrer les options de la méthode NAVIGATION_FONCTIONS car pour chaque fonction (Chercher, Trier, ...), il faut orienter l’action vers la table correspondant à la page sélectionnée.

Dans ce cas, il est plus simple d’indiquer une seule fois au début de la méthode quelle est la table à traiter. On stocke cette indication dans une variable puis on utilise la variable dans les commandes.

Pour des questions de cohérence, on ne peut pas dire qu’une variable soit égale à une table, ce sont des objets conceptuellement différents à contenu également différent. Nous avons vu qu’une variable peut être de type entier, numérique, texte, image... et donc contenir une valeur du type concerné. Or une table n’est pas un contenu comme le serait par exemple une valeur numérique.

La solution consiste à utiliser une variable de type pointeur.

Nous allons donc définir cette variable qui sera une variable locale

 C_POINTER($PointeurTable)

Cette variable existe en mémoire. Maintenant pour la valoriser nous allons utiliser ce type de syntaxe :
 $PointeurTable:=->[INTERVENTIONS]

Donc nous avons bien comme nous l'avions vu pour les variables

  • une initialisation
  • une valorisation

et par la suite, à chaque endroit où la table Interventions aurait dû être utilisée on va pouvoir remplacer par cette variable, qu'il va falloir dans ce cas "dépointer".

L'avantage étant que tout le code qui est ici, qui est un simple copier-coller avec juste changement de la table, peut être remplacé par ces 2 mêmes lignes, à condition que nous ayons défini au préalable vers quelle table il fallait pointer en fonction du numéro de page.

Nous nous retrouvons donc à récupérer le code que nous avions écrit tout à l'heure et ici à indiquer que :

  • si nous sommes en page 1 nous pointerons vers interventions (->[INTERVENTIONS])
  • si nous sommes en page 2 nous pointerons vers techniciens (->[TECHNICIENS])

Ceci étant indiqué nous n'avons plus besoin de tester les pages ici et il n'est donc plus utile d'avoir ce programme en double.

Nous avons une 1ère programmation ici qui permet :

  • de définir la table concernée en fonction de la page
  • et ensuite l'action à réaliser quelle que soit la page puisque de toute façon la bonne table a été définie.

Pour chercher le principe est le même :

  • on va déplacer ici le code
  • enlever complètement le au cas ou qui est là
  • et remplacer intervention par pointeur vers la table puisque si nous sommes sur la page 2

Arrivés ici le pointeur sera un pointeur vers "Techniciens" et nous chercherons donc dans la table "Techniciens".

Le nombre d'enregistrements trouvés sera bien le nombre d'enregistrements trouvés dans la table "Techniciens"
 

 
 

 
PROPRIÉTÉS 

Produit : 4D
Thème : Pointeurs

 
HISTORIQUE 

 
UTILISATION DE L'ARTICLE

Autoformation ( 4D v16)