PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Comment est ce que je peux chainer des appels de fonction
Comment est ce que je peux chainer des appels de fonction
Débuté par Francois-Alexandre, 18 juil. 2018 20:58 - 4 réponses
Posté le 18 juillet 2018 - 20:58
Bonjour!

Je suis à la recherche d'une syntaxe me permettant de chainer mes appels de fonction.

monResultat = new Calculateur().DiviserDeuxNombres(8, 4)


Au lieu de devoir faire

monCalculateur = new Calculateur()
monResultat = monCalculateur.DiviserDeuxNombres(8, 4)


Calculateur contient bien la fonction DiviserDeuxNombres

Merci !
Membre enregistré
136 messages
Popularité : +12 (14 votes)
Posté le 19 juillet 2018 - 13:17
Salut François-Alexandre

Voici une solution que j'arrive à faire fonctionner avec Windev 23

Soit une Classe

MaClasseChainee est une Classe
nombre est un entier
FIN


J'ai défini deux procédures sur cette classe :

Procedure Multiplie(nFacteur est un entier)

nombre = nombre * nFacteur

RENVOYER objet


Procedure Additionne(n est un entier)

nombre = nombre + n

RENVOYER objet


Tu remarqueras que ces deux procédures renvoient en résultat la référence de l'objet lui même (mot clé "objet")

Voici le code de test :

clMaClasseChainee est un MaClasseChainee

clMaClasseChainee.Additionne(10).Multiplie(4)

Info(clMaClasseChainee.nombre)


Et le résultat est correct ! :merci:






J'espère que cet exemple t'aidera

Je sais que je ne réponds pas tout à fait à ta question qui consiste à pouvoir instancier et appliquer une fonction à un objet de classe en une seule ligne.

Sur ce point, je ne vois pas de solution autre que de passer un paramètre chaîne décrivant la séquence d'appel et, dans le constructeur, d'utiliser les fonctionnalités de récupération de définition de classe pour lancer les procédures demandées.

Mais sur le principe d’enchaînement de plusieurs fonction, c'est cool car j'ai découvert quelque chose !



Christophe
Message modifié, 19 juillet 2018 - 13:32
Posté le 20 juillet 2018 - 14:03
Bonjour,

rMonResultaat est un réel = Calc.donneInstance().diviser(5,2)


methode 'donneInstance'
Procedure PUBLIQUE GLOBALE donneInstance() : Calc
monInstance est un Calc

RENVOYER monInstance


Dans le cas d'un calculateur, vous pouvez utilisez ne qui des methodes globales (si vous n'avez pas besoin d'un instance)
rMonResultaat est un réel = Calc.diviser(5,2)[code:wl]
Membre enregistré
136 messages
Popularité : +12 (14 votes)
Posté le 20 juillet 2018 - 15:11
Je n'avais pas pensé aux procédures de classe ;)

Mais dans la mesure ou la procédure n'agit pas sur l'instance de la classe, autant faire une collection de procédures spécialisée...
Membre enregistré
34 messages
Popularité : +3 (3 votes)
Posté le 20 juillet 2018 - 15:21
Bonjour Christophe,

Je trouve que une classe avec des procedures globales est plus lisible que une collection de procedures.
J'ai l'impression que PCSoft vois les avantages aussi:
monTableau est un tableau de chaînes

TableauAjouteLigne(monTableau,"aaa")


ou
monTableau est un tableau de chaînes
monTableau.ajoute("aaa")


Mais les deux (classe et collections de procedures) sont valable