Initialisation de variables Structurées

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Initialisation de variables Structurées

Message par Dräc »

Subitement j’ai un doute :
Dans la version prochaine de PureBasic (v4 !?), sera t-il permis d’initialiser une variable structurée à partir d’une autre de même type en écrivant :

Code : Tout sélectionner

var2.Structure1 = var1.Structure1
:?: :?: :?:

Si oui, pourra t’on aussi espérer faire:

Code : Tout sélectionner

var2.Structure2 = var1.Structure1
du moment qu’une relation existe entre Structure1 et Structure2, c’est à dire que l’une est l’étendue de l’autre ?

Si c’est Structure2 qui étend la Structure1, alors l’affectation ne touche que les champs de var2 issuent de Structure1.
Si c’est Structure1 qui étend Structure2, alors tous les champs de var2 sont affectés.
Dans tous les cas, l’affectation ne touche qu’aux champs en commun !

(…me serrais-je avancé ? :roll: )
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

Code : Tout sélectionner

 var2.Structure1 = var1.Structure1
En terme de programmation on appelle ça faire de la surcharge d'opérateur. Et c'est peut-être possible à faire.

Il faudrait que Fred nous offre la possibilité de donner de nouvelle instruction à l'opérateur.

Le meilleur moyen serait de programmer toi-même la méthodes qui fait ça .

Code : Tout sélectionner

; ObjetA.Structure1 = ObjetB.Structure1

Procedure EqualStructure1(*ObjetA, *ObjetB)
  
  *ObjetA\Champs01 = *ObjetB\Champs01
  *ObjetA\Champs02 = *ObjetB\Champs02
  
EndProcedure
Ce qui serait bien c'est que Fred fasse en sorte que le compilateur puisse reconnaître ces commandes automatiquement lorsqu'il arrive sur les Variables Structurées. Je pense que l'ajout de la définition d'un opérateur avec des mot clef pourrait ressembler à quelque chose comme ceci :

Operator
EndOperator


Exemple :

Code : Tout sélectionner

; ObjetA.Structure1 = ObjetB.Structure1

Operator PlusStructure1(*ObjetA, *ObjetB, *Result)
  
  *Result\Champs01 = *ObjetA\Champs01 + *ObjetB\Champs01
  *Result\Champs02 = *ObjetA\Champs02 + *ObjetB\Champs02
  
EndOperator

Operator MinusStructure1(*ObjetA, *ObjetB, *Result)
  
  *Result\Champs01 = *ObjetA\Champs01 - *ObjetB\Champs01
  *Result\Champs02 = *ObjetA\Champs02 - *ObjetB\Champs02
  
EndOperator
Quand c'est approprié bien sûr. Je vois mal comment on pourrait faire une soustraction, une multiplication ou une division sur les chaines de caratères. (On prend la valeur ASCII de chacun des caractères, on fait les multiplications caractère par caractère et on affiche la chaine résultante :roll: )

C'est ma suggestion sur ce sujet.

A+
Guimauve
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Bah ca peut par exemple être utile avec les nombres complexes... Surcharger les opérateurs simplifirai le code..

Dri
Répondre