Le 9/7/12 2:04 AM, Remi Forax a écrit :
> On 09/07/2012 12:09 AM, Henri Gomez wrote:
>>> Non, tu auras toujours de belles classes avec des belles méthodes,
>>> ou au
>>> moins de belles interfaces bien documentées
>>> mais le code à l'intérieur de certaines méthodes va être simplifiée.
>>> tu préfères,
>>>
>>> Files.forEachLine(path).filter(s ->
>>> !s.startsWith("#")).map(Integer::parseInt).reduce(0, (a, b) -> a + b);
>>>
>>> ou
>>> int sum = 0;
>>> try(BufferedReader reader = Files.newBufferedReader(path)) {
>>> String s;
>>> while ((s = reader.readLine()) {
>>> if (s.startsWith("#")) {
>>> continue;
>>> }
>>> int value = Integer.parseInt(s);
>>> sum += value;
>>> }
>>> }
>>>
>>> Je dis pas qu'il faudra pas un petit temps d'adaptation, (c'est quoi
>>> filter/map/reduce ?)
>>> mais si tu compare les deux ya pas photo.
>> Ce qui m'inquiète, tout comme Manu, c'est que ce genre de code est
>> très élégant mais pas directement compréhensible par le développeur
>> Java moyen.
>
> C'est un argument à la TF1 pour justifier secret story et autres merdes.
Je pense que c'est exactement l'inverse.
TF1 fait de la merde pour "créer du temps de cerveau disponible", ie tu
sors d'un tunnel de merde prêt à absorber un message "intelligent", la pub.
Dans ce qu'explique Henri, et je partage son point de vue, l'idée c'est
de rester dans un cadre où celui qui va maintenir le code que tu écris
en Arte style (mais le Arte de 1992, hein parce que Arte aujourd'hui,
c'est largement regardable par les masses...) puisse "comprendre" ce que
tu as fait sans se faire des noeuds au cerveau.
Pour sortir des analogies foireuses, il est possible de sortir des chefs
d'oeuvre compréhensible par le commun des mortels sans utiliser
profusions de tournures de style que le vulgus pecum ne saisie pas, et
ce d'autant plus facilement que ces tournures de style n'existent pas :)
Bon, on peut *aussi* faire de la merde :-)
> Le dev moyen, comme la ménagère de moins de 50 ans, ça existe pas,
> enfin pas en vrai.
Ca existe, à condition d'en avoir plusieurs :)
Disons que c'est la moyenne entre le petit jeune qui sort de l'école et
le vieux con avec 30 ans d'expérience...
> Tu as déjà rencontré un mec qui te dis, bonjour je suis dévelopeur
> moyen, nan,
> tous le monde évolue, un dévelopeur moyen c'est juste une façon de
> figer les choses
> en regardant le passé alors qu'entre temps, toute la team c'est mis à
> guava
> et râle parce que ça serait plus cool d'avoir une syntaxe plus adapté
> que les inners classes.
> Même GoldmanSachs à une bibliothèque à base de lambdas qui s'ignore
> (et sur github en plus).
Concernant les inner-class, je peux te garantir que j'en vois
extrèmement peu dans les projets sur lesquels je bosse et sur les
projets que je suis amener à regarder (principalement des projets
Apache). Cela veut dire deux choses :
- on peut largement s'en passer
- dans les rares cas où on ne s'en passe pas, on préfère avoir du code
verbeux mais proche de la syntaxe classique pour éviter de "perturber"
le futur nouveau committer...
L'idée de base est de faciliter ce que j'appelle "l'entrée dans le code"
des futurs participants. Une syntaxe abstruse n'aide pas, et c'est un
peu la raison de ma croisade contre Scala (merde, je viens d'atteindre
le point Goodwin ici ;) : ça relève la barrière d'accès à un point que
le petit nouveau ne va pas pouvoir apporter sa contribution sauf effort
conséquent...
>
> Pour la petite histoire, je me souvient d'une discussion vers 97 d'un
> mec qui candidatait
> pour un poste d'enseignant de C++ et qui a gentillement expliqué que
> la programmation objet
> c'était trop compliqué pour le developeur moyen, heureusement, avec
> Visual C++,
> on pouvait écrire du code C en faisant semblant que c'est du C++.
:) Vous l'avez pris ?
>
>> On m'a appris il y a longtemps que ce qui faisait la différence en
>> programmation c'était la lisibilité et la facilité avec laquelle tout
>> un chacun peut intervenir sur du code qu'on a écrit.
>
> Oui, mais en même temps les pratiques évoluent, car les besoins évoluent.
Ca fait pas mal de temps que je bosse, et les besoins n'évoluent pas si
vite que ça. Ce que l'on fait en Java, on le faisait déjà en Smalltalk
il y a 40 ans. Certes beaucoup plus lentement ;-)
C'est juste qu'aujourd'hui, on n'a plus besoin de mettre 50 000€ sur la
table pour faire tourner une IDE sur une machine ayant la puissance
nécessaire...
Et si on compare Java avec C++, il y a même pas mal de choses en moins
dans le langage (héritage multiple, surcharge d'opérateurs, pointeurs de
fonctions...), ce qui le rend beaucoup plus simple à utiliser. Le fait
que Java intègre un GC nativement a aussi été une des principales raison
de son adoption (le write once, run everywhere aussi). Dans ce cadre, le
besoin a surtout été de proposer "a better C++". Et c'est un succès.
> Exemple extrème, on voit des designers se mettre à javascript puis à
> NodeJS,
> et là c'est farci de callbacks, de triggers partout, bref de lambdas.
Alors là, je me marre d'avance en attendant les résultats :) Et si je me
mettais à faire du Design, moi qui suis un développeur ? Ah, merde, le
problème, c'est que le Design, ça se voit immédiatement que ce que je
vais produire, c'est juste de la merde en bâton, vu mes "talents
graphiques" ;-) Bref, chacun son métier, les ports TCP seront bien
gardés ...
>
>> Hors dans une équipe et à plus forte raison une entreprise, normale,
>> les développeurs ne sont pas tous des stars, loin de là.
>
> Oui, mais en même temps, pas besoin d'être une star pour comprendre
> les lambdas,
> comparé aux inner-classes, au modèle de mémoire/à la concurrence, à la
> reflection,
> les lambdas c'est plus simple car une fois que tu as pigé la '->' et
> le '::', le reste c'est que
> de l'API, donc si tu comprends pas tu fais comme tout le monde, tu
> invokes le dieu javadoc.
C'est pas faux. Mais je ne suis pas sûr que ça ne va pas rendre le code
moins lisible. On risque de voir fleurir le code basé sur les callbacks,
et je te raconte pas l'enfer que ça va être pour débugger tout ce plat
de spaghettis...
Parce que au final, c'est quand même facile de retrouver une méthode par
son nom dans un IDE digne de ce nom, plutôt qu'une lambda... Mais c'est
peut-être un aspect qui n'intéresse pas trop celui qui écrit sa lambda
en pensant bien faire ?