De nombreux types de membres de struct et de classe (les champs étant la principale exception) peuvent utiliser la syntaxe des membres avec corps d'expression. Définir un membre à l'aide d'une expression produit souvent un code plus concis et plus lisible que les blocs ou instructions traditionnels.
Les méthodes et les propriétés en lecture seule comptent parmi les membres qui peuvent être définis avec un corps d'expression.
public int Times3(int input) => input * 3;
public int Interesting => 1729;
Une expression switch permet de faire correspondre une valeur à l'un des cas d'un ensemble de motifs, puis de renvoyer la valeur associée ou d'effectuer l'action associée. L'association est indiquée par le symbole =>. De plus, chaque motif peut comporter un garde de cas facultatif, introduit par le mot-clé when. L'expression du garde de cas doit être évaluée à vrai pour que cette « branche » du switch soit sélectionnée. Les cas (aussi appelés branches du switch) sont évalués dans l'ordre du texte ; le processus s'interrompt et la valeur associée est renvoyée dès qu'une correspondance est trouvée.
double xx = 42d;
string interesting = xx switch
{
0 => "I suppose zero is interesting",
3.14 when DateTime.Now.Day == 14 && DateTime.Now.Month == 3 => "Mmm pie!",
3.14 => "π",
42 => "a bit of a cliché",
1729 => "only if you are a pure mathematician",
_ => "not interesting"
};
// => interesting == "a bit of a cliché"
Les opérateurs ternaires permettent de définir des conditions if directement dans des expressions plutôt que dans des blocs d'instructions. Cela rejoint les approches de la programmation fonctionnelle et rend souvent le code plus expressif et moins propice aux erreurs.
L'opérateur ternaire combine 3 expressions : une condition suivie d'une expression à évaluer et à renvoyer si la condition est vraie (la partie if, introduite par ?) et une expression à évaluer et à renvoyer si la condition est fausse (la partie else, introduite par :).
int a = 3, b = 4;
int max = a > b ? a : b;
// => 4
Les expressions throw sont une alternative aux instructions throw et permettent en particulier de rendre le ternaire et les autres expressions composées encore plus puissants.
string trimmed = str == null ? throw new ArgumentException() : str.Trim();
On t'a demandé d'améliorer du code hérité lié à une station météo.
La station météo accepte des relevés et fournit quelques indicateurs comme la température et la pression.
Réécris les méthodes appropriées de la classe WeatherStation en utilisant des membres à corps d'expression. Utilise des opérations ternaires et des expressions switch là où c'est pertinent, pour améliorer l'expressivité et potentiellement réduire les erreurs.
Vérifie que tous les tests continuent de réussir.
Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.