構造体やクラスの多くのメンバー(主な例外はフィールドです)は、式形式のメンバー構文を使えます。メンバーを式で定義すると、従来のブロックや文を使うよりも簡潔で読みやすいコードになることがよくあります。
メソッドと読み取り専用プロパティは、式形式の本体で定義できるメンバーに含まれます。
public int Times3(int input) => input * 3;
public int Interesting => 1729;
switch式を使うと、値を一連のパターンのうち1つのケースに照合し、対応する値を返したり、対応する処理を行ったりできます。この対応は=>記号で表します。さらに、各パターンにはwhenキーワードで導入する省略可能なケースガードを付けられます。そのswitchの「アーム」が選ばれるには、ケースガードの式がtrueと評価される必要があります。ケース(_switchアーム_とも呼ばれます)は記述された順に評価され、一致が見つかるとすぐに処理は打ち切られ、対応する値が返されます。
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é"
三項演算子を使うと、if条件を文ブロックではなく式の中で定義できます。これは関数型プログラミングのアプローチに通じるもので、コードをより表現豊かに、よりエラーが起きにくくできることがよくあります。
三項演算子は3つの式を組み合わせます。条件と、その条件がtrueのときに評価されて返される式(?で導入されるifの部分)、そして条件がfalseのときに評価されて返される式(:で導入されるelseの部分)です。
int a = 3, b = 4;
int max = a > b ? a : b;
// => 4
throw式はthrow文の代わりになるもので、特に三項演算子やその他の複合式の力を高めてくれます。
string trimmed = str == null ? throw new ArgumentException() : str.Trim();
気象観測所に関するレガシーコードの改善を依頼されました。
気象観測所は測定値を受け取り、気温や気圧などの指標を出力します。
WeatherStationクラスの中で適切なメソッドは、式形式のメンバーを使ってリファクタリングしましょう。また、適切な箇所では三項演算子やswitch式を使うと、表現力を高められ、エラーを減らせる可能性があります。
すべてのテストが引き続き通ることを確認してください。