Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

Usings implicites et “Top Level Statements”

MAUI c’est du XAML et du C#, l’un et l’autre évoluent. Les grandes nouveautés ne passent pas inaperçues mais les moins fulgurantes sont parfois ignorées. En voici deux qu’il ne faut pas louper malgré tout !

Les Usings « implicites »

Ce n’est pas ultra nouveau puisque cela remontre à .NET MAUI Preview 11. Mais on peut avoir loupé cet nouveauté… Car MAUI utilise désormais des usings implicites pour réduire le nombre d'instructions « using » que vous devez spécifier en haut de chaque fichier. 

Plus précisément, depuis cette version, vous n'avez pas besoin d'ajouter d'instructions « using » pour les espaces de noms suivants, qui sont désormais tous disponibles implicitement dans les projets .NET MAUI :

  • Microsoft.Extensions.DependencyInjection
  • Microsoft.Maui
  • Microsoft.Maui.Controls
  • Microsoft.Maui.Controls.Hosting
  • Microsoft.Maui.Controls.Xaml
  • Microsoft.Maui.Graphics
  • Microsoft.Maui.Essentials
  • Microsoft.Maui.Hosting

Si vous débutez avec .NET MAUI, les utilisations implicites vous facilitent vraiment la vie car vous n'avez pas à chercher pour savoir dans quels espaces de noms se trouvent des types spécifiques. Cependant, notez qu'il y a parfois des types que vous devrez utiliser qui résident dans d'autres espaces de noms pour lesquels vous devrez alors ajouter des using.

La liste des using « implicites » n’est pas figée et le mieux est de vérifier la documentation Microsoft à jour pour s’assurer de ceux pris en charge.

Il ne s’agit vraiment plus d’une nouveauté puisque c’est du C#10, mais bizarrement cela ne semble pas être encore connu de tous (lire l’article suivant qui lançait C# 10 en Novembre 2021, le temps passe vite ! https://devblogs.microsoft.com/dotnet/welcome-to-csharp-10/ ). Il y a bien d’autres petites ou grandes différences de C#10 qui sont encore mal maîtrisées, alors puisque c’est l’été, profitez-en pour lire quelques articles sur le sujet (et bien entendu sur C#11 aussi, ici : https://learn.microsoft.com/fr-fr/dotnet/csharp/whats-new/csharp-11 ).

Top Level Statements

Voici une autre curiosité qui pour une fois n’a pas ma totale adhésion. Mais je l'ai déjà abordée en mars dernier à propos des nouveautés de C#9. Toutefois il me semble bon de faire un "lot" avec les using implicites et d'en remettre une couche !
C’est une simplification qui vise certainement à attirer les nouveaux venus ou à tricher dans les benchmarks de type Hello World le plus court. On y perd du sens, de la précision et je n’aime pas cela. J’aime les langages fortement typés pour la forme intelligente de rigidité qu’ils imposent, sinon je ferais du javascript ou je reviendrai au Basic Microsoft interprété qui était chargé en ROM dans les premiers PC IBM…

Mais bon, c’est là, et bien là puisque les modèles de création de projets MAUI utilise cette « astuce » venu en réalité de C#9 et .NET 5.

Le principe est de faire sauter des déclarations pourtant pleines de sens. Mais forcément pour un Hello World on pourrait s’en passer… Dommage je n’écris pas de Hello World à longueur de journée…

Bref, à quoi cela ressemble ?

Prenons le code console de base suivant :

using System;
namespace Application
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

C’est clair et net. On sait qu’on va utiliser des éléments du namespace System, qu’on crée une classe Program qui contient une méthode statique void Main recevant les paramètres de la ligne de commande en argument. Ici on n’en sert pas et on se contente d’écrire « Hello World » à la console.

Moi ça me va, c’est complet, on sait qui intervient et pourquoi.

Mais avec la nouvelle syntaxe « Top level Statements » à vous de tout deviner… car vous pouvez juste écrire :

Console.WriteLine("Hello World!");

Et ç ava compiler et faire la même chose !

Certains crierons de joie. 

D’autres comme moi qui aiment les tours de passe-passe mais uniquement au music-hall feront un peu la tronche… (et la font déjà quand il faut revenir à un truc plus clair car les templates de projet utilisent désormais cette nouvelle « non-syntaxe »).

Conclusion

Comme d’habitude je ne peux que vous conseiller de prendre connaissance de tous les changements intervenus dans C#, notamment le 10 et le 11. Il est indispensable de savoir ce qui change, ce qui est utile comme ce qui ne l’est pas mais qu’il faut connaître tout de même pour pouvoir continuer à lire du code récent sans se gratter la tête…

C# contient beaucoup trop de choses. Mon premier titre MVP était MVP C#, j’aime ce langage et je le connais assez bien. J’ai vu au fil du temps les plans de cours que je créais pour mes clients passer de 4 jours à 3 semaines. Le code est-il meilleur pour autant aujourd’hui ? Non. Au lieu de connaître 100% du langage et de bien s’en servir tout le monde baragouine un C# dans lequel chacun a retenu deux nouveautés de C# 3, 1 de C# 5, rien de C#6, (ni de 2) etc… Une sorte de cherry picking malsain mais que je ne peux que condamner, car quand c’est trop c’est trop.

Il serait temps à mon avis de revenir à un C# type C#3 avec Linq, et de créer un autre langage à côté avec un autre nom.

Mais Microsoft ne me consulte pas sur ce sujet, c’est dommage, alors apprenez bien tous ces milles détails ajoutés tous les ans qui transforment un excellent langage clair et fortement typé en un grand gloubi-boulga où chacun fait son marché et écrit le code qu’il veut dans la plus grande anarchie…

Sinon restez à l’ombre, buvez frais mais pas trop, et s’il fait froid, estimez-vous content d’avoir échappé aux 50° fatidiques au-delà desquels le corps humain ne peut plus réguler sa température. Ou alors, comme ce blog a été écrit en décembre 2022, peut-être que mon serveur viendra de publier ce contenu, tout seul, sur une planète vidée de ses humains, ça aura été l’été de trop ou la bombe russe de trop… Qui sait…

Sinon à septembre alors…

Stay Tuned ! (On aura peut-être survécu ! Restons optimistes et donc studieux !)

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