A la conférence NDC 2013 à Londres, Mads Torgersen a évoqué les prochains changements liés au langage C#. Il convient de noter que ce ne sont que des propositions et elles ne garantissent pas l’application dans une version future du langage. Damien Guard a posté un résumé et une brève analyse de ces propositions. Vous trouverez ci-dessous un résumé des évolutions les plus notables.
Les propriétés en lecture seule
Les propriétés implémentées automatiquement et en lecture seule permettront aux développeurs de déclarer les propriétés et leur champ de stockage en une seule et même ligne de code.
public int X { get; } = x;
Import de types statiques
Visual Basic et JavaScript autorisent déjà les développeurs à importer des modules (classe statique en C#) dans un espace de nom. Cela permet de diminuer le code répétitif lors de l’appel à une méthode statique. Nous pourrons ainsi supprimer le code répétitif tel que le préfixe « Math. » lors de l’appel à une méthode de cette dite classe.
Les constructeurs primaires
En plaçant les paramètres directement après le nom de la classe, les développeurs n’auront plus besoin de créer explicitement un constructeur. Cela supprime le code permettant de copier les paramètres du constructeur dans les champs privés associés.
public class Point(int x, int y) {
private int x, y;
}
Propriétés et méthodes d’expressions
Les propriétés d’expressions devraient éliminer drastiquement la quantité de code nécessaire pour la mise en place d’une propriété calculée en lecture seule.
public double Distance => Math.Sqrt((X * X) + (Y * Y));
Les méthodes d’expressions suivront une logique équivalente et supporteront bien évidemment le passage de paramètres.
Notez que les propriétés paramétrées n’entrent pas encore en considération. Cela reste seulement une fonctionnalité de Visual Basic et cela n’est pas envisagé à court terme pour C#.
Les paramètres de fonctions
De nos jours, la plupart des développeurs n’utilisent pas de tableaux sauf quand ils ont besoin d’utiliser le mot-clé « params ». Ainsi, l’une des propositions est de mettre à jour l’interface IEnumerable pour supporter le passage de paramètres. Néanmoins, d’autres langages tels que Visual Basic auraient aussi besoin de se mettre à jour pour supporter cette fonctionnalité.
Une autre proposition est de permettre aux variables locales d’être déclarées lors de l’utilisation du mot-clé out de la manière suivante :
int.TryParse("123", out int x);
Propagation et absence de valeur
Quand vous travaillez avec des « messy data », les développeurs doivent souvent écrire une série de vérifications avant de lire une propriété ou d’invoquer une méthode. La syntaxe ?. éliminerait cette condition en invoquant une méthode si la valeur précédente n’est pas nulle.
var bestValue = points?.FirstOrDefault()?.X;
Dans ce cas, si « points » ou l’instruction « points.FirstOrDefault()» renvoie une valeur nulle, alors .X est ignoré et la valeur nulle est retournée. Ce code peut être chainé avec l’opérateur ?? afin de fournir une valeur par défaut si besoin.
var bestValue = points?.FirstOrDefault()?.X ?? -1;
Cette approche existe déjà dans les langages tels qu’Objective-C et Smalltalk est peut être assimilé comme un problème et non une solution puisqu’il peut cacher les exceptions de type NullReferenceException.