FILTRER, METTRE EN CACHE OU MAPER, OU TRIER UN ITERATEUR

LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009 - 5 juin 2008 à 20:26
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 8 juin 2008 à 17:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46892-filtrer-mettre-en-cache-ou-maper-ou-trier-un-iterateur

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
8 juin 2008 à 17:47
c'etait essentiellement pour la factory du listeur de dossiers.
setFileClass (string class_name="SplFileObject")
setInfoClass (string class_name="SplFileInfo")

t'as juste ca, mais tu ne peux pas mettre de factory, or perso, j'ai des classes qui lisent les attributs de mes fichiers (lire les tags d'un mp3, le type d'un fichier source, la playliste d'un m3u, les exif d'une image, les donnees d'un ini, de quoi lire un csv, etc...) et pour la classe de la SPL, on ne peut pas distinguer un .mp3 d'un .ini... (sauf en faisant des filterIterators)

on en avait deja parle sur le forum il y a quelques temps.

pour le reste, ils n'ont pas de classe abstraite Proxy, qui soit parente a map, filter, limit, et recursive.

ils ne font pas la distinction entre les iterateurs finnis et infinis.

Ensuite, perso j'aime bien l'idee que ca soit les elements qui soient filtrables ou non, et pas l'iterateur qui filtre n'importe quoi avec un callback (ou non d'ailleur)
idem pour le tri.
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 juin 2008 à 14:23
Hello coucou,

même si, pour être franc, je comprends mal pourquoi tu as décidé de réécrire la SPL (à mon avis tu devrais l'expliquer, d'ailleurs), c'est quand même un boulot énorme. Et c'est très bien codé; Bravo :-) 10.
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
6 juin 2008 à 10:21
Vi c'est sur, le mieu restant l'arbre binaire équilibré pour arriver à N*log(N), mais bon N*N c'est un complexité acceptable sauf si on traite vraiment beaucoup de données ^^
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
6 juin 2008 à 10:15
throw new OMGException();
:) localstone va se regaler avec mes conventions de nomages XD

Morphinof, c'est un truc assez interessant cet arbre de recherche, mais pour les perfs, je ne suis pas sur qu'il soit si bon... car en generale, on traite des listes quasiment triees, et pour une liste triee, il est en N*N... (le Qsort est en N * log(N) )
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
6 juin 2008 à 10:04
Je chipotes ;)
if(!function_exists($a)) throw new blablala ^^
En tout cas je me régales je vais certainement utiliser l'arbre binaire :)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
6 juin 2008 à 09:56
non, ca plante :)

c'est sur le proxyclass, ca... si tu fais $o=new ... ; $o->call_fonction_qui_nexiste_pas, ca plante aussi hein :)

ca te fait un fatal_error, avec ma classe, comme sans ma classe de toute facon...
Morphinof Messages postés 255 Date d'inscription vendredi 20 avril 2007 Statut Membre Dernière intervention 9 août 2013 4
6 juin 2008 à 09:46
Un sacré package très instructif ! J'aime beaucoup ;)
En survolant vite fait le code je suis tombé la dessus :
public function __call($a, $b){
$o=$this->target;
return call_user_func_array( array($o, $a), $b);
}
si on appelle une fonction qui n'existe pas y'a pas d'exception :p
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
5 juin 2008 à 20:51
merci

pour les noms, c'est un de mes defauts, je corrigerais ca quand la debian testing sera passee a php5.3, histoire que je puisse profiter des namespaces.
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
5 juin 2008 à 20:26
J'aime bien ta source parce que ça me rappelle le Java pour certains aspects ... Et j'aime bien le Java :P !
Par contre, il y a un petit truc qui me dérange ... J'avoue que j'ai pas regardé les 30 classes, mais c'est au niveau de tes conventions de code : parfois c'est en anglais, parfois c'est en français, parfois les noms de classes ne sont pas complet et parfois si (FinIterator ... Pourquoi pas FiniteIterator ou équivalent ...).
Vu l'ampleur de la source, ça mériterait d'être plus stricte et plus rigoureux ... Mais en même temps, je ne suis pas un pro !
Rejoignez-nous