URL: https://linuxfr.org/users/montaigne/journaux/a-mort-les-boucles Title: A mort les boucles Authors: Ontologia Date: 2007年04月17日T18:21:25+02:00 Tags: Score: 0 On parle peu d'informatique en ces colonnes en ce moment, ainsi me suis-je dis qu'un bon troll du mardi serait peut être sympa. Comme je ne savais pas de quoi vous parler, je vais vous faire partager ma haine pour ce qui me torture en tant qu'analyste programmeur vulgus de métier : les boucles. Je pourrai parler d'inculture informatique dans l'industrie (comme un de mes chefs à qui j'ai appris ce qu'est une regexp ou une table de hashage, ou d'un autre qui m'a répondu lorsque je lui parlais de langage fonctionnel "fonctionnel ? qui fonctionne ?" quand je pense qu'ils sont chefs censés codé et effectivement programmeurs...), mais non parlons de boucles. Au commencement, il y avait ça (merci Lurker) : 10 print i 20 i = i +1 30 if i< MAX then goto 10 Ensuite, comme vous le savez on a eu for ( i = 0 ; i< MAX ; i++) printf("%d\n",i); ensuite on pourra avoir ça (1..MAX).foreach { int i; print i; } Puis (là ça devient beau) (1..MAX).map print Je passe la programmation par contraintes. Alors comme j'ai lancé ma dissertation de but en blanc, je parlerai de 2 sous problèmes. Le premier est la sous formation. A l'image de l'anecdote que je rapportai plus haut pour pleurer en passant sur votre épaule (des fois c'est dur), on forme les informaticiens bac+2/bac+4, voire les ingénieurs à l'impératif, à java, etc... Comme ce sont des gens pour lesquels la définition d'une fonction soit est flou, soit est une notion philosophique qui ne sert à rien (souvent les deux), ils vont avoir un peu de mal si on leur propose de coder en Lisp ou en Caml. De plus, ce sont en général des GENS (selon la définition GCU : [http://imil.net/wp/lexique/](http://imil.net/wp/lexique/) ) qui ont pour caractéristique de se contenter de ce qu'ils ont et de ne pas rechigner à réécrire 100 fois la même chose, chaque jour. Le mot généricité est un mot vaguement philosophique pour eux. Ils s'en approchent parfois, quand le client gueule parce que le projet a un mois de retard et reste effroyablement buggé. Le second est lié aux langages. Ecrire un map, un fold ou un filter(1) en java, est une gageure, en on code beaucoup de chose en javouille. J'ai trouvé ici ou là des tentatives, mais c'est syntaxiquement affreux. Je réessaierai un jour avec la réflexivité. Une autre raison de la profusion de boucles-qui-ne-servent-à-rien est l'absence d'une sorte de SQL objet dans le langage (je parle pour les langages objets). Kro$oft en a sorti un depuis quelques années, ça s'appelle LINQ, et je pense que ça va faire un carton. Par exemple j'ai Objet1 contenant une liste de Objet2, contenant lui même une liste de Objet3, Objet3 possède un champ toto, une chaîne. Je veux tous les objets de type Objet3 que Objet1 contient mais, seulement ceux sur lesquels la fonction Quelconque(String quoi), appliqué au champ Objet3.toto, renvoi true : select Objet3 from Objet1 where Quelconque(Objet1.listeObjet2.listeObjet3.toto) Bah non, je dois faire trois boucles. Pareil, j'ai deux liste d'objets représentant la liste du personnel d'une boite à deux dates distrinctes. Je veux les comparer(une appli d'analyse d'évolution de la masse salariale par exemple), faut que je fasses des boucles... Et je vous dis pas comme c'est casse gueule de refaire une clause where avec un "not in" pour un dyscalculique comme moi... Je pense qu'il nous faudrait un outil pour générer du code à partir d'une requête du genre. Je vous en reparlerai bientôt, car j'ai commencé à travailler sur la question. Bref je crois que dans notre croisade contre les bugs, et avant qu'on arrive à faire des compilateurs sémantique (ie. des langages axiomatiques turing complet, en d'autres termes ou l'on se contente de décrire ce que l'on veut, comme en sql (voir un trip perso là dessus : [http://wiki.loria.fr/wiki/Lisaac/M%C3%A9talangage](http://wiki.loria.fr/wiki/Lisaac/M%C3%A9talangage) )) (1)[http://www.zvon.org/other/haskell/Outputprelude/filter_f.htm(...)](http://www.zvon.org/other/haskell/Outputprelude/filter_f.html)