3 nouveautés super pratiques de C#11
Your Content Goes Here
24/12/2022
4min
Table des matières
C#11 n’a pas fini de livrer ses surprises. Tel un père Noël qui a plus d’un cadeau dans sa hotte, cette nouvelle mouture est riche de nouveautés et de découvertes.
Aujourd’hui, nous allons parler de 3 features de C#11 que vous verrez sûrement passer dans les mois à venir.
On y va!
Raw string literals
Ce bout de code résume à lui tout seul cette fonctionnalité. Nouvelle incursion dans le monde C#, les raw string literals sont une nouveauté plutôt pratique. J’y vois deux avantages. Le premier est l’élimination de l’échappement lorsque l’on veut mettre des guillemets dans une chaîne. Qui se souvient de ces immondices? :
(Je parle de la syntaxe, et non de ces fromages suédois 😉)
Jadis, copier/coller un JSON dans un code C# était un réel exercice de style. C’était aussi un jeu de copier coller à partir d’un site quelconque qui échappe chacun des guillemets pour donner un rendu final difficilement lisible.
L’exemple du camembert ci-dessus, avec une chaîne verbatim (@
), illustre bien ce propos. Les raw string literals permettent de s’abstraire de toute fioriture:
Trois guillemets, copier→coller. Terminé.
Plutôt cool non ? C’est sans compter un autre avantage qui concerne la performance car les raw string literals suppriment le retour chariot (rn
) en début et en fin de chaîne.
C’est toujours deux lignes en moins à analyser !
Mine de rien, cela rappelle énormément la syntaxe des docstrings en Python, qui en plus d’être assignables à une variable, peuvent être utilisées en tant que documentation.
List patterns
Celle là est assez dingue. Elle applique toute la puissance du pattern matching aux listes et tableaux. Cette feature permet de faire des vérifications (check conditions dans la langue de Shakespeare) sur des listes et des tableaux.
Le comble, c’est qu’elle ne vient pas seule, Car il est possible d’y utiliser:
- Les signes
<=
et>=
, comme pour les patterns réguliers. - Des wildcards (
_
), comme dansnumbers is [1, 2, _]
, qui détecte les 2 premiers nombres du pattern + n’importe quel autre nombre - Les autres mots clefs introduits avec .NET 5 (
and
,or
,not
). Par exemple, il est possible d’écrire:
File scoped types
Celle là est la plus simple à comprendre. Elle permet de restreindre l’accès d’une classe/d’un type au seul fichier auquel elle est déclarée. Il suffit d’utiliser le mot-clef file
juste avant le nom de la classe.
Mais pourquoi cela existe ? Plusieurs explications sont à prendre en compte, mais je pense dans un premier temps qu’il peut être intéressant de chambouler certaines habitudes de programmation.
Selon moi, déclarer plusieurs classes au sein d’un même fichier peut être une bonne pratique. En particulier dans une classe comme un test unitaire ou un test d’intégration.
Dans certains codes front-end, comme avec Blazor, il peut aussi être intéressant d’avoir la logique d’un composant dans une classe à part, mais dans le même fichier.
Il n’y a pas de règle. Du moment que cela reste lisible, et que le tout est bien découpé et cohérent. De plus, ce genre de modifieurs et de pratiques existent déjà depuis plusieurs années avec le mot-clef fileprivate
au sein du langage Swift:
Notez l’usage du mot-clef fileprivate
avec non seulement cette struct
, mais aussi cette variable. Cela signifie que la structure et la variable backgroundColor
sont locales au fichier. Peut-être que cela arrivera bientôt au sein de C#!
Aussi, une autre raison de ce changement peut-être l’arrivée des source generators. En effet, certaines classes générées peuvent avoir besoin de faire appel à une logique ou des modèles qui ne sont pas forcément faits pour êtres exposés au grand public. Ou juste que le code généré est trop peu élégant pour être montré 😉.
Conclusion
Cet article conclut cette série de fin d’année sur C#11.
Nous avons pu voir à quel point .NET 7 a fortement impacté C# avec des nouveautés qui sont here to stay.
Et ce, tout comme .NET 5 a pu le faire avec les top-level statements, même si ce n’était pas une LTS (comme .NET 7).
Merci à tous de nous avoir lus, bonnes fêtes, et bonne année !