Dot.Blog

C#, XAML, Xamarin, WinUI/Android/iOS, MAUI

C#10 et 11

Le langage ne cesse d’évoluer, il faut se tenir au courant de ses avancées…

C# et ses évolutions

C# est un langage qui n’a cessé de s’améliorer. Alors que la syntaxe de nombreux langages est quasi figée depuis leur création à part quelques modifications à la marge, C# est passé d’un langage simple (la V 1) à un monstre dans ses dernières versions.

Est-ce un bien ?

Quand les nouvelles features viennent rendre votre travail plus facile, plus productif, assurément c’est un bien (comme Linq par exemple) ! Pour les jeunes ingés qui veulent montrer leurs muscles (où les vieux ingés qui veulent faire à la page, genre vieux-beaux) c’est certainement un terrain de jeu terriblement amusant pour écraser de son savoir ceux qui préfèrent être que paraître.

Mais tout progrès a sa face sombre, et personnellement je trouve que les évolutions trop nombreuses de C# en rendent l’apprentissage presque impossible. D’un cours de 5 jours pour apprendre l’essentiel à un débutant il y a longtemps on en est arrivé à 4 semaines minimum pour C# 10 si on veut prendre le temps de tout expliquer et de faire quelques exercices pour vérifier la compréhension… Et ça je ne trouve pas que cela soit un « bien » mais plutôt un enfer car dans les équipes on trouve des écarts de niveau de plus en plus grands, donc dangereux pour la maintenance des logiciels, ce qui ne serait pas possible avec un langage plus « resserré » sur l’essentiel. On s'en sort généralement malgré tout puisque la plupart des formations ne sont que des mises à jour basées sur la connaissance d'anciennes versions. Mais, pour celui qui doit tout apprendre depuis le départ, cela est peut-être devenu un peu long. Certes on peut toujours faire du "globsharp" comme d'autres parlent le "globish" et non l'anglais. Tout dépend des objectifs bien entendu.

Il y a donc du pour et du contre comme à chaque fois. Gardez à l’esprit qu’il est préférable d’écrire un code lisible par le plus grand nombre que du code de SSII pondu par de jeunes ingés en mal de reconnaissance technique et que plus personne ne peut maintenir passés 6 mois, pas même eux !

Cela dit, que cela nous plaise ou non, Microsoft a décidé de faire de C# un langage jamais terminé et toujours en mouvement, pour le meilleur comme pour le pire.

C# 10 nous offre tout de même quelques avancées intéressantes qu’il serait dommage de bouder. Par exemple le mot clé record permet de définir des structures immuables « out of the box ». Très intéressant pour se rapprocher de la programmation fonctionnelle mais plus prosaïquement pour écrire du code multithread plus sûr.

Les Global Usings sont aussi bien pratiques. Au lieu de lister plein de Usings en début de chaque code on peut placer dans un seul endroit (App par exemple) des usings « globaux » qui seront valable partout.

Il y a aussi des petites différences qui viennent perturber la lecture plus qu’autre chose à mon avis, comme la fin de l’obligation d’entourer le code d’un namespace avec des parenthèses.

Puis il y a les choses qui auraient dû marcher comme ça dès le départ. Comme le fait de pouvoir utiliser des constantes (Const) dans les chaînes interpolées (par $).

Comme vous le voyez il y a à boire et à manger, des choses intéressantes et d’autres plus anecdotiques. A vous de voir ce qui vous est utile et de piocher les bons morceaux et laisser le reste pour éviter d’encombrer votre code de passages illisibles…

D’ailleurs je ne vais pas faire une redite de la doc Microsoft sur un sujet aussi basique. Ce papier n’a pour vocation de vous interpelez sur les évolutions de C# et leur bonne utilisation. Pour la liste purement technique et fastidieuse, mais complète, des nouveautés de C#10 je vous recommande chaudement la doc officielle qu’on trouve ici : https://docs.microsoft.com/fr-fr/dotnet/csharp/whats-new/csharp-10

Et C# 11 ?

Ah les vilains gourmands !

On a à peine entamé le plat qu’ils pensent à reprendre du dessert !

Ce que j’ai dit plus haut sur C# 10 reste valable bien évidemment …

Ce qu’il est important de savoir c’est que C# 11 nous est livré par petits morceaux depuis longtemps dans Visual Studio 2022 !

Ainsi la version 17.1 amenait les attributs génériques ou les templates de listes. Mais la version 17.2 amenait les littéraux de chaînes brutes ce qui est bien du C# 11 et non du 10. De même la version 17.3 amène des améliorations à nameof, ou le modificateur « required » pour les champs et les propriétés.

Là aussi, le mieux est de s’abreuvoir à la source, la doc officielle : https://docs.microsoft.com/fr-fr/dotnet/csharp/whats-new/csharp-11

Conclusion

Bref C# 10 est livré, les gens commencent à peine à s’en servir que C# 11 au lieu d’arriver groupé dans un an en une seule fois nous est distillé par petits bouts dans les versions intermédiaires de Visual Studio.

Je n’aime pas réellement cette façon de procéder. Indépendamment du danger que j’évoquais déjà plus haut d’un langage qui telle la grenouille qui voulait se faire plus grosse que le bœuf de la fable finira peut-être par exploser à la face de ses créateurs trop exaltés et brouillons.

Microsoft, faites un autre langage, laissez le choix aux développeurs d’utiliser un langage de niveau .NET 3.5 quand LINQ a été introduit par exemple et créez un D# à côté dans lequel on additionnera toutes les petites choses intervenues entre temps. Comme ça on saura. Un développeur C# serait obligé de connaître parfaitement C#, mais un C# cernable et compréhensible. Et si on voulait plus (mais qui en entreprise le demanderait…) on exigerait la connaissance de D#...

J’ai commencé ma « carrière » de MVP en 2009 en étant MVP C#. J’adore ce langage. Et je l’aime toujours autant alors je voudrais le protéger contre un grand danger qui le guette, devenir impraticable car inapprenable…

Stay Tuned !

Faites des heureux, partagez l'article !
blog comments powered by Disqus