top of page
Rechercher

Tip #9 - Qu'est que 'This' dans 4D?

C'est plus facile de parler de 'This' en français que en anglais car 'This' na pas de sens en français.


'This' est un mot-clé qui représente l'objet courant dans la programmation orientée objet (OOP).


Comme 4D fait un grand pas en avant dans OOP, je pense qu'il est bon de prendre le temps d'analyser comment 'This' fonctionne dans 4D. Je ne ferai pas de comparaison avec d'autres langages de programmation ici, mais n'hésitez pas à commenter le billet pour y ajouter vos remarques.


Comment avoir accès à 'This' dans 4D ?

Pour cela, nous devons avoir un objet avec une formule associées à une propriété. Mais comment associer une formule à une propriété dans 4D ?

Voici le code :

Ici nous voyons que je crée un objet et l'affecte à la variable locale $person1.

Première question, quand mon objet est-il créé ? A la ligne 1 ou 2 ?

.

.

.

.

.

En fait, l'objet est créé lorsque vous exécutez la commande "New object". La commande "C_OBJECT" déclare seulement que la variable locale $person1 sera une variable objet. En fait, ici, la variable ne contiendra qu'une référence à l'objet créé via la commande "New object". Avant la commande "New object", $person1 est indéfini. Voir le Tip #8 pour plus d'informations sur les références des objets.


J'assigne alors une formule à la propriété "sayHello" de mon objet. Je le fais grâce à la commande "Formula" (avant la v17 R6 elle s'appelait "New formula"). Si une formule est affectée à une propriété, celle-ci devient une fonction membre. Vous pouvez maintenant appeler la fonction membre en écrivant "$person1.sayHello()". Cela exécutera la méthode "MF_sayHello".


Venons-en maintenant à la partie intéressante où 'This' entre en jeu. Nous voyons que notre objet n'a pas encore de propriétés.

Ajoutons un nom à notre personne :

Nous avons maintenant une propriété nommée "name".

Si nous regardons la méthode "MF_sayHello", nous voyons à quel point il est simple d'utiliser 'This' :

Ici 'This' représente l'objet qui a appelé la fonction membre 'sayHello'. Dans ce cas, 4D lie automatiquement 'This' à l'objet courant qui a appelé la fonction membre.

Et si nous voulions avoir le contrôle de ce à quoi 'This' est lié ?

Ceci est possible grâce aux 2 fonctions membres de notre formule. Une formule a 2 fonctions membres disponibles : "call" et "apply". Ces 2 fonctions membres acceptent, comme premier paramètre, un objet qui sera lié à 'This'. La seule différence est la façon dont les paramètres seront transmis à la fonction membre (le cas échéant)

"call" acceptera une série de paramètres séparés par un ";" tandis que "apply" acceptera un paramètre de type collection qui contient la série de paramètres à transmettre à la fonction membre. Le dernier permet d'écrire du code plus générique.

Examinons un exemple :

Nous voyons ici comment j'utilise la fonction membre de l'objet "$person1" pour attribuer des adresses aux objets "$person2" et "$person3". Notez que "$person2" et "$person3" n'ont pas la fonction membre "setAddress".


Ok, c'est tout pour l'instant. Je suis sûr que cela parlera à de nombreux développeurs venant de langages OOP. Pour les développeurs 4D, cela peut être nouveau, mais cela ouvre un tout nouveau monde de possibilités. Nous pouvons commencer à créer une sorte de classe à l'intérieur de 4D d'une manière très simple. Je n'ai aucune idée si à l'avenir nous aurons plus de choses "semblables aux classes" comme les attributs "privé" et "public" et "constructeur", etc. Mais laissons l'avenir nous apporter un peu plus de surprise.


P.S. Et j'ai presque oublié, voici une petite base de données HDI qui montre tout ce que je dis dans ce post. Je vous laisse jouer avec : https://www.dropbox.com/sh/8jel0sv6kbo87ae/AAAlZbWAudx2VACEhK2qXnwFa?dl=0

35 vues0 commentaire

Posts récents

Voir tout

List of 4D Components and Plugins

I realize that there is no list of existing components and plugins in 4D. I think it can be cool to make such kind of list to try to have a kind of catalog where people can look at to see what is avai

bottom of page