PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Comment est ce que je peux chainer des appels de fonction
Comment est ce que je peux chainer des appels de fonction
Iniciado por Francois-Alexandre, jul., 18 2018 8:58 PM - 4 respostas
Publicado em julho, 18 2018 - 8:58 PM
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 !
Membro registado
136 mensagems
Popularité : +12 (14 votes)
Publicado em julho, 19 2018 - 1:17 PM
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
Mensagem modificada, julho, 19 2018 - 1:32 PM
Publicado em julho, 20 2018 - 2:03 PM
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]
Membro registado
136 mensagems
Popularité : +12 (14 votes)
Publicado em julho, 20 2018 - 3:11 PM
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...
Membro registado
34 mensagems
Popularité : +3 (3 votes)
Publicado em julho, 20 2018 - 3:21 PM
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