C# 3.0 / Linq

Je ne sais pas si vous avez regardé la Keynote de la PDC, mais outre la présentation de Vista et Office 12 (que je trouve tout à fait sympa, surtout du point de vue développeur, contrairement à notre Mac Fan de Caf ,-) ), il y a eu une superbe démo de Don Box et Anders Hejlsberg (qui commence par demander au publique “Qui accède à des données dans ses programmes?”…) sur C# 3.0 et Linq.

En bref, Linq c’est un nouveau framework d’accès aux données relationnelles (dlinq) ou xml (xlinq) qui explose tout le reste (bon d’accord, en même temps les autres frameworks éxistant ne peuvent pas modifier la syntaxe et le compilateur C#…). En bref, pour tous ceux qui cherchent encore une solution miracle pour leurs DAL, regardez la KeyNote et jouez un peu avec la CTP spécial PDC05 dispo ici : http://msdn.microsoft.com/vcsharp/future/.
Je pense que Glop pourra en parler plus abondament que moi (je n’ai passé qu’une journée dessus personnellement), donc je le laisse abonder d’éloges sur cette technologie franchement prometteuse.

Pour les plus feignant, je vais faire des petites Videos de demo en francais qui seront dispo sur le Labo dotnet dans peu de temps.

Pour ceux qui sont intéressés, (l’excellent) dotnetguru a publié un petit article en français pour présenter c# v3 et linq.

Je suis à l’affut des articles qui vont pulluler dans les jours à venir la dessus (et toutes les discussions sur « c’est bien/c’est pas bien »)… J’invite tous ceux qui trouveront des infos à venir constituer une petite « mine à liens » pour ceux qui seraient (comme moi) intéressés… Je tâcherai de faire de même :stuck_out_tongue:

erf, et la v2 est pas encore sorti officiellement…
Et je suis sur qu’à MS certains commencent déjà à imaginer abstraitement la v4…

[quote name=‹ Xas › date=’ 15 Sep 2005, 01:06’]erf, et la v2 est pas encore sorti officiellement…
Et je suis sur qu’à MS certains commencent déjà à imaginer abstraitement la v4…
[right][post=« 397461 »]<{POST_SNAPBACK}>[/post][/right][/quote]
Bon j’ai pris ma retraite du debat a la con mais ca m’empeche pas de poster des trucs quand c’est interessant :stuck_out_tongue:

Donc, non, ca fait juste plusieurs mois que la v2 est termine et est en phase de stabilisation. Quand tu ecris des millions de ligne de code, tu sors pas le programme des que t’as fini de coder. Tu passes des mois a corriger des bugs jusqu’a ce que le nombre diminue, tu stabilises, tu peaufinnes. C’est comme un enorme paquebot, plus c’est gros, plus ca prend du temps a s’arreter. Donc au final, il n’y a pas de nouvelle fonctionalitee ou de nouvelle architecture significative dans .Net 2.0 depuis decembre dernier et depuis debut Juillet environ les changement sont les plus minimes possibles (car chaque changement meme pour corriger un probleme, c’est un nouveau probleme potentiel). Si t’es un architecte comme Don Box ou Anders Hejlsberg, en plus de la gestion de ton equipe pour finir la v2, ton travail d’architecte se fait sur la v3 depuis le debut de l’annee en gros. Normal qu’en septembre ils aient des trucs a montrer. Ces gens la partent « en eclaireur », etudient les problemes, definissent des pistes et des solutions, preparent une architecture vu de plus ou moins loin et 6 mois plus tard quand les devs qui codent ont fini avec le boulot de la v2 (genre en Juillet donc dans ce cas) ils passent a commencer de bosser avec les architectes pour savoir comment on va implementer tout ce bordel et faire l’architecture des « details ». C’est un enorme boulot, ca prend du temps et les versions se recouvrent plus ou moins. Ca fait un decalage de limite 2 ans entre le travail qui est fait et le travail qui est utilise mais c’est comme ca.

Tiens une video de Anders Hejlsberg qui explique le bordel sur channel 9.

Rhooo je me doutais bien que t’aurais pris ma remarque de façon négative.
Mais bon, je prend ça comme une crise de parano soudaine à cause de la news de CWiz.

Tiens Cyrus a fait aussi un article tout aussi explicatif que dng dessus http://blogs.msdn.com/cyrusn/default.aspx.

Nah moi le truc qui m’impréssione le plus, c’est qu’un compilo (aussi alpha soit-il) soit déjà disponible au public pour test.

Sinon sur l’article de dng j’adore beaucoup la conclusion de sami, ça résume assez bien la frustration de certains développeurs.
Du coup c’est un peu normal. Merde quoi, on va bientot recevoir la nouvelle Ferrari v8 Turbo à 2000 chevaux et v’là qu’on nous montre que la v12 3000 chevaux existe déjà et qu’elle tue.

En tant qu’humble geek c’est degueulasse. Tu joues avec nos sentiments Glop, c’est mal.

Pour protester je m’en vais faire du PHP3 !

[quote name=‹ Xas › date=’ 15 Sep 2005, 01:41’]Rhooo je me doutais bien que t’aurais pris ma remarque de façon négative.
Mais bon, je prend ça comme une crise de parano soudaine à cause de la news de CWiz.
[right][post=« 397484 »]<{POST_SNAPBACK}>[/post][/right][/quote]
Bah deja deux chose:

  1. je l’ai pas pris negativement, sinon j’aurais pas repondu :stuck_out_tongue: rapport a mes nouvelles resolution tout ca. Nan, au contraire, c’est un truc interessant et y a pas mal de gens qui pigent pas pourquoi alors que c’est meme pas sorti, on parle deja de la suite encore 2 ans apres.

  2. c’est pas specialement la news de cwiz telle qu’elle a ete ecrite qui m’a enerve. Du tout. En se limitant au texte, dans l’ensemble c’etait ecrit de telle maniere que c’est pas ca du tout qui m’a saoule. Ce sont certains trolls a dix centimes et le concept du « c’est rigolo on va faire reagir glop » (et c’est pas de la parano, cf la suite) et ca a ete la goute qui fait deborder le vase, en soit c’est pas pire que d’habitude…

Faut cerner le personage du trollissime rincevent aussi. J’avais pas envie de rentrer dans les details mais apparement le message que j’ai ecrit a la volee est pas super passe exactement comme ce que je voulais dire et il y a eu des damages collateraux arf. Donc je quote du PM ce qui est mal, mais a la limite vu la demarche a la base c’est justifié. C’est sa deuxiemme reponse apres une moderation et une montee de son niveau d’avertissement il y a pas si longtemps (la premiere etant un PM grandiloquent du genre « tu m’as moddé tu te sens trop fort banne moi si cest ca » que j’avais ignore. Erreur, erreur apparement…):

[i]
"je dois préciser aussi que j’avais déjà voulu discuter avec toi sur certains points, t’affronter je dirais pour être totalement honnête. […]

bon donc […] je t’avais déjà lancé une petite pique pour voir ta réaction dans le topic SQL d’Ismar, je sais pas si tu l’avais vu ou pas en tout cas t’as pas réagi et c’est de la qu’on m’a prévenu de faire gaffe avec toi (entre parenthèse […] t’as une sacré réput de tueur sur ce forum) ce qui finalement n’a fait que renforcer ma curiosité à ton encontre.

[…] que tu ait vu ou pas ma première pique SQL puis mon troll « politique »
"[/i]

J’avais repondu que c’etait tres gentil, mais qu’a la limite j’etais pas la pour jouer, meme si souvent ca me derangeait pas de discuter. Mais bon si au final c’est pour faire bete de foire pour amuser la gallerie non quoi.

Hophop, je repars un peu sur le sujet de C# v3, et de ma difficultée évidente à trouver un interêt au typage explicite…

De l’intérêt de taper

var x = "coucou";

au lieu de

string x = "coucou";

La seule justification que je trouve est dans ce code :

var orders = &nbsp;new Dictionary<int, Order>();

Qui permet d’éviter d’avoir 2 fois sur la même ligne « Dictionary<int, Order> » qui finit par faire verbeux (c’est vrai qu’on en a de plus en plus des déclarations de 3km de long avec des retours chariots pour caser tous les paramètres du constructeurs).

Mais si c’est la seule raison, alors que je trouve que c’est un peu du « je-me-fais-chier-pour-pas-grand-chose ». Ou bien il y a un autre intérêt caché que je n’aurais pas vu ?

Tiens, j’en rajoute une autre après avoir lu quelques commentaires sur dotnetguru. C’est vrai que le côté « on vous montre ce que vous aurez dans 3 ans » est un peu déstabilisant. Disons qu’il faut savoir recevoir les informations, parce que c# v2 avec les generics notamment arrivent à peine (officiellement il ne sera là qu’avec la version officielle). Je ressens un peu le sentiment d’être constamment largué, c’est usant :stuck_out_tongue: Du coup je me force à prendre vachement de recul par rapport à ce que je vois, pour éviter l’envie de « télécharger et tout migrer la dessus ».

Mais ce genre d’annonce force la remise en question : il ne se passe pas une semaine sans que je ne remette en cause tout mon développement sur mon architecture n-tiers que je commence à utiliser à toutes les sauces dans toute mes applis… Je me demande en quoi tout cela va remettre en question mes anciennes décisions, que si j’avais su cela je l’aurais sûrement fait différement, etc.

Comme le dit Sami (de dotnetguru), de telles infos nous permettent de mieux appréhender l’avenir. D’un autre côté, c’est de la grande réflexion et installation de produits beta à tout va. Pas simple :stuck_out_tongue:

Ah sinon, Glop, honnêtement, ca fait quelques temps que je trouvais que la moindre de tes participation devenait quasiement « provoquée » par quelques messages bien aiguisés. A plusieurs reprises je me suis dit « tiens, quelqu’un qui cherche un pétage de cable ». Bref, je comprends un peu ta lassitude vis-à-vis de certains.

[quote name=‘Xas’ date=’ 15 Sep 2005, 11:41’]Tiens Cyrus a fait aussi un article tout aussi explicatif que dng dessus http://blogs.msdn.com/cyrusn/default.aspx.
[right][post=“397484”]<{POST_SNAPBACK}>[/post][/right][/quote]
J’aime bien son exemple car il montre une certaine utilité du var (même si je trouve ca moche : on doit chercher pour comprendre le type de retour du coup).

Et puis il sort un peu de l’exemple de msdn (qui est celui repris par DNG d’ailleurs), en montrant un peu mieux comment se servir des expressions lambda.

C’est vrai que le ‘var’ est un peu dure à comprendre au premier abords.
Surtout qu’il doit être initialisé à sa création, et ne peut pas changer de type tout le long de son existence.

Un gain dans le changement de type ?

Ou plutot avec le concepts des generics, ou de la nouvelle expression lambda…

Avec un exemple plus parlant…

Si on pouvait régler ces problèmes en PM, ce serait sympa… Car je pense que dans ce thread, c’est du Linq (Language INtegrated Query) qu’il s’agit (la MSDN donne aussi un autre usage du keyword var, pour les types anonymes). Ce serait cool si on pouvait éviter les trolls Linux/Win/MacOS (par contre pour le placement des accolades… :P).

[quote name=‘xentyr’ date=’ 15 Sep 2005, 17:34’](la MSDN donne aussi un autre usage du keyword var, pour les types anonymes).
[right][post=“397607”]<{POST_SNAPBACK}>[/post][/right][/quote]
Je le ressors pour les gens intéressés.

var value = new { &nbsp;Name = "Chris Smith", Age = 31, CanCode = false };
qui permet de remplacer le code :

[code]internal class ??? {
 string _Name;
 int    _Age;
 bool   _CanCode;

 public string Name {
   get { return _Name; } set { _Name = value; }
 }

 public int Age{
   get { return _Age; } set { _Age = value; }
 }

 public bool CanCode {
   get { return _CanCode; } set { _CanCode = value; }
 }
}[/code]
en gros donc, la possibilité de définir des types anonymes.

Et, pour finir, le réel “pourquoi du comment de la chose”, à priori :

[code]var expr = people.Select(p => new {
              p.Name, BadCoder = p.Age == 11
          });

foreach (var item in expr)
 Console.WriteLine("{0} is a {1} coder",
                    item.Name,
                    item.BadCoder ? “bad” : “good”);[/code]
Voilà, l’utilisation du Select qui renvoie une expr, expr étant une énumération d’un type anonyme, du coup dans le foreach on utilise var, et on a les infos.

M’enfin, pour moi ca reste utile pour du mini-code, de l’ordre du snippet ou pour créer des données qui n’ont pas lieu de vivre au delà d’un contexte très restreint (traitement spécifique dans une méthode).

Et de toute façon, le mot clé var n’est utilisable qu’à l’intérieur d’un bloc de code. par exemple on ne peut pas déclarer un membre de type var ou un méthode qui renvoit un var.

Pour l’utilité du var, pour moi c’est tout d’abord pour clarifier le code, mais aussi et surtout pour les types anonymes, et les types qui viennent un peu du fin fond du framework et qu’on utilise que par le biais de leur interface IEnumurable par exemple… Je pense particulièrement à l’API dlinq, qui renvoit des « Select<S,T> » ou autre « Query<S,ResultSet> » qui font peur au petit codeur des familles ^^.
Voilà voilà, ce serait sympa d’éviter le polluage de sujet, merci…