Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Flash Pascal
Flash Pascal Forum d'entraide sur la création de fichiers Flash en Object Pascal
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/06/2012, 09h06   #1
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 539
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

Informations professionnelles :
Activité : Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2002
Messages : 4 539
Points : 11 904
Points : 11 904
Par défaut Cas de conscience sémantique

Bonjour,

Je vous soumets un cas de conscience ... peut-être aurez vous une idée que je n'ai pas envisagé.

actuellement FlashPascal déclare les évènements comme des propriétés de type "procedure of object.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
type
  MovieClip = external class
    property onPress: procedure of object;
  end;
 
var
  mc: MoveClip;
begin
  mc := MovieClip.Create(_root, '', 1);
  mc.onPress := ...
end;
c'est tout à fait fonctionnel...mais de par la conception de FlashPascal et la nature de Flash, il est possible de dériver MovieClip avec une méthode onPress

Code :
1
2
3
4
5
 
type
  MyMovie = class(MovieClip)
    procedure onPress;
  end;
cela donne deux approches et je trouve cela un peu confus, j'aimerai donc trouver une syntaxe qui permette de faire sauter cela.

J'ai pensé à ceci:

Code :
1
2
3
4
5
6
7
8
9
 
type
  MovieClip = external class
    procedure onPress; virtual;
  end;
 
  MyMovie = class(MovieClip)
    procedure onpress; override; // n'a plus besoin d'être case sensitive
  end;
grâce au virtual/override, seule la méthode virtuelle a besoin d'avoir la bonne casse, la casse de la méthode surchargeant étant ignorée. Et on est assuré d'avoir correctement tapé le nom de la fonction.

mais on perd la possibilité d'attacher la méthode "mc.onPress := ...".

je me suis dit que je pouvais étendre la syntaxe pascal en autorisant d'affecter une méthode virtuelle et le tour est joué.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
type
  MovieClip = external class
    procedure onPress; virtual;
  end;
 
  MyMovie = class(MovieClip)
    procedure onpress; override; // n'a plus besoin d'être case sensitive
    procedure autrepress;
  end;
 
var
  mc: MyMovie;
begin
   mc := MyMovie.Create(_root, '', 1);
   mc.onpress := autrepress;
end;
alors, ça fonctionne, mais c'est sémantiquement très discutable. En effet, la méthode avec override intervient au niveau de la classe, donc toutes les instances de MyMovie utilisent ce code...alors qu'en affectant "autrepress" à "onpress" on travaille au niveau de l'instance; les autres instances ne sont pas affectées.

c'est d'autant plus troublant que j'ai fait le test avec XML sous ActionScript, et ça fonctionne.

Code c :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
//-- TXML.as
class TXML extends XML {
	function onData(src: String) {
		trace('class');
	}
}
//---
var x1 : TXML = new TXML();
var x2 : TXML = new TXML();
x2.onData = function(src: String) {
	trace('instance');
}
x1.load('TXML.as'); // class
x2.load('TXML.as'); // instance

Alors est-ce que cette syntaxe avec virtual/override vous choque ?
Avez vous une autre idée pour gérer cette dualité propriété/méthode ?

Notez qu'avec cette modification, il faudra ajouter un "override" à toutes les méthodes surchargée dans le code existant...à moins que je n'inclus des warning...
__________________
Developpez.com: Mes articles, forum FlashPascal
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice, FlashPascal
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2012, 09h41   #2
Archimède
Membre Expert
 
Avatar de Archimède
 
Homme anthony
Enseignant
Inscription : avril 2005
Messages : 1 071
Détails du profil
Informations personnelles :
Nom : Homme anthony
Localisation : France, Charente Maritime (Poitou Charente)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 1 071
Points : 1 002
Points : 1 002
Hello,


Personnellement, l'histoire de casse est vraiment problématique. J'ai encore été empoisonné hier avec le trackbar pour une erreur qui était liée à cela.
Ton cas de conscience risque de choquer les puristes en Pascal mais ton entorse arrangerait très bien les choses...
Moi personnellement, ça ne me dérange pas mais ce serait intéressant d'avoir le point de vue des responsables Pascal.
Le désagrément lié à la casse pour moi l'emporte sur le fait de transgresser les règles. (mais c'est un point de vue personnel...)
Une autre solution ?...A part des warning...
Si les warning apparaissent de manière efficace au moment où on tape avec une mauvaise casse, j'y suis favorable (avec la bonne syntaxe qui apparaisse à l'écran ou même avec une insertion automatisée). Ce qui serait sans doute encore la meilleure méthode peut-être.

voilà
__________________
Citation:
tout développeur plongé dans son code subit une poussée d'urticaire de bas en haut égale au poids du volume d'unités qu'il ajoute.
Archimède est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2012, 11h17   #3
Paul TOTH
Expert Confirmé Sénior
 
Avatar de Paul TOTH
 
Homme Paul TOTH
Freelance
Inscription : novembre 2002
Messages : 4 539
Détails du profil
Informations personnelles :
Nom : Homme Paul TOTH
Âge : 43
Localisation : Réunion

Informations professionnelles :
Activité : Freelance
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2002
Messages : 4 539
Points : 11 904
Points : 11 904
c'est ce qu'il me semble, d'autant que j'ai tendance à plus utiliser la version "override" que l'affectation d'un évènement.

après cela ne serait sans doute pas compatible avec ActionScript 3 (quand FlashPascal fera du Flash 11)...mais en même temps il risque d'y avoir bcp d'incompatibilité entre FlashPascal 2 et 3...ne serait-ce que parceque AS2 et
3 ne tournent pas dans la même machine virtuelle et qu'on ne retrouve pas tous les objets AS2 en AS3.

bon je me donne entre le temps de la réflexion
__________________
Developpez.com: Mes articles, forum FlashPascal
Entreprise: Execute SARL
Produits : UPnP, RemoteOffice, FlashPascal
Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5%
Paul TOTH est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 10h00.


 
 
 
 
Partenaires

Hébergement Web