PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > nzn.fr.delphi > [TROLL INSIDE] MsRL - Microsoft Reference License
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
[TROLL INSIDE] MsRL - Microsoft Reference License

Réponse
 
LinkBack Outils de la discussion
Vieux 10/10/2007, 16h01   #76
Pierre Y.
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TROLL INSIDE] MsRL - Microsoft Reference License

Pierre Y. a pensé très fort :
> Pierre Y. avait prétendu :
>> Flo a formulé ce lundi :
>>> Pierre Y. a écrit :
>>>> Patrons = générateurs de code ?
>>>
>>> oui cf rev 2192 (et les quelques fix suivants).
>>> J'ai modifié JPP pour qu'il expande les macros contenant les différents
>>> containers, j'en profite pour ajouter d'autres fonctionnalités comme la
>>> vérification des doublons, la sensibilité à la casse...

>>
>> Il semblerait que ça bugge (j'ai le pb), quand on demande un itérateur sur
>> une collection IJclIntfList, il ne parcoure pas le dernier élement :
>>
>> var
>> ItF: IJclIntfIterator;
>> begin
>> // ...
>> ItF := UneCollection.First;
>>
>> while ItF.HasNext do
>> begin
>> with IMonInterface(ItF.GetObject) do
>> begin
>> // Do Something
>> end;
>> ItF.Next;
>> end;
>> end;

>
> Semblerait que ce soit pas ça le pb. Je continue à chercher... :-?


Semblerait que ce soit ça, je suis un neuneu de l'algo de parcours
d'une liste avec un itérateur ;-) Ce que ne m'explique pas c'est que ma
bouse fonctionnait avant...

J'ai réécrit le truc comme ça :

ItF := UneCollection.First;

if ItF.HasNext then
begin
repeat
with IMonInterface(ItF.Next) do
begin
// Do Something
end;
until (not ItF.HasNext);
end;

Y'a mieux ? Plus "propre" par rapport à la manière dont fonctionnent
les composants de JclContainer ?

--
Pierre Y.


  Réponse avec citation
Vieux 10/10/2007, 16h06   #77
Flo
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TROLL INSIDE] MsRL - Microsoft Reference License

L'utilisation de GetObject est généralement source de problème.
Le fonctionnement interne des itérateurs implique que Next doit être
appelé le premier dans la boucle afin d'initialiser la valeur courante,
GetObject permet de récupérer le dernier objet retourné par Next ou
Previous.

while ItF.HasNext do
begin
with IMonInterface(ItF.Next) do
begin
// Do Something
end;
end;

ou alors:

while ItF.HasNext do
begin
MyRef := ItF.Next;
// Do Something
MyRef := Itf.GetObject; // same object
end;

D'après les différentes recherches que j'ai fait sur le net, cela semble
être le comportement "standard" d'un itérateur.
Par contre pour des raisons de compatibilité ascendante,
l'implémentation est souple et ne génère pas d'erreur dans ton cas.
Crois-tu qu'elle devrait?
  Réponse avec citation
Vieux 10/10/2007, 16h11   #78
Flo
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TROLL INSIDE] MsRL - Microsoft Reference License

Pierre Y. a écrit :
> Semblerait que ce soit ça, je suis un neuneu de l'algo de parcours d'une
> liste avec un itérateur ;-) Ce que ne m'explique pas c'est que ma bouse
> fonctionnait avant...
>
> J'ai réécrit le truc comme ça :
>
> ItF := UneCollection.First;
>
> if ItF.HasNext then
> begin
> repeat
> with IMonInterface(ItF.Next) do
> begin
> // Do Something
> end;
> until (not ItF.HasNext);
> end;
>
> Y'a mieux ? Plus "propre" par rapport à la manière dont fonctionnent les
> composants de JclContainer ?


presque mieux, ton algo est identique à:

while ItF.HasNext do
begin
with IMonInterface(ItF.Next) do
begin
// Do Something
end;
end;

regarde aussi mon message précédent
  Réponse avec citation
Vieux 10/10/2007, 16h23   #79
Pierre Y.
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TROLL INSIDE] MsRL - Microsoft Reference License

Flo vient de nous annoncer :
> Pierre Y. a écrit :
>> Semblerait que ce soit ça, je suis un neuneu de l'algo de parcours d'une
>> liste avec un itérateur ;-) Ce que ne m'explique pas c'est que ma bouse
>> fonctionnait avant...
>>
>> J'ai réécrit le truc comme ça :
>>
>> ItF := UneCollection.First;
>>
>> if ItF.HasNext then
>> begin
>> repeat
>> with IMonInterface(ItF.Next) do
>> begin
>> // Do Something
>> end;
>> until (not ItF.HasNext);
>> end;
>>
>> Y'a mieux ? Plus "propre" par rapport à la manière dont fonctionnent les
>> composants de JclContainer ?

>
> presque mieux, ton algo est identique à:
>
> while ItF.HasNext do
> begin
> with IMonInterface(ItF.Next) do
> begin
> // Do Something
> end;
> end;
>
> regarde aussi mon message précédent


Parfait, en fait, je les avais déjà modifiés un peu partout sauf dans
deux procédures et là ça m'a pété au nez.

Merci Jcl de me faire programmer correctement ;-)

--
Pierre Y.


  Réponse avec citation
Vieux 10/10/2007, 16h35   #80
Flo
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TROLL INSIDE] MsRL - Microsoft Reference License

Pierre Y. a écrit :
> Parfait, en fait, je les avais déjà modifiés un peu partout sauf dans
> deux procédures et là ça m'a pété au nez.


Crois-tu qu'un pétage plus violent (du genre une exception si GetObject,
Remove ou Insert est appelé avant le premier Next ou Previous) serait
efficace?
  Réponse avec citation
Vieux 10/10/2007, 18h31   #81
Pierre Y.
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: [TROLL INSIDE] MsRL - Microsoft Reference License

Flo a formulé la demande :
> Pierre Y. a écrit :
>> Parfait, en fait, je les avais déjà modifiés un peu partout sauf dans deux
>> procédures et là ça m'a pété au nez.

>
> Crois-tu qu'un pétage plus violent (du genre une exception si GetObject,
> Remove ou Insert est appelé avant le premier Next ou Previous) serait
> efficace?


Voire enlever GetObject ou le marquer deprecated. De toutes manières ça
ne peut qu'être positif d'inciter les développeurs à utiliser
correctement ces objets.

--
Pierre Y.


  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 03h25.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,10714 seconds with 14 queries