Tracks
/
C#
C#
/
Übungen
/
The Weather in Deather
The Weather in Deather

The Weather in Deather

Lernübung

Einführung

Member mit Ausdruckskörper

Viele Arten von Membern in Structs und Klassen (Felder sind die wichtigste Ausnahme) können die Syntax für Ausdruckskörper-Member verwenden. Wenn du ein Member mit einem Ausdruck definierst, entsteht oft kompakterer und lesbarerer Code als mit traditionellen Blöcken bzw. Anweisungen.

Methoden und schreibgeschützte Eigenschaften gehören zu den Membern, die mit einem Ausdruckskörper definiert werden können.

public int Times3(int input) => input * 3;

public int Interesting => 1729;

Switch-Ausdrücke

Ein Switch-Ausdruck kann einen Wert einem Fall aus einer Menge von Mustern zuordnen und den zugehörigen Wert zurückgeben oder die zugehörige Aktion ausführen. Die Zuordnung wird durch das Symbol => angezeigt. Außerdem kann jedes Muster eine optionale Fallbedingung haben, die mit dem Schlüsselwort when eingeleitet wird. Der Ausdruck der Fallbedingung muss wahr ergeben, damit dieser „Zweig“ des Switch ausgewählt wird. Die Fälle (auch Switch-Zweige genannt) werden in der Reihenfolge des Textes ausgewertet, und sobald eine Übereinstimmung gefunden wird, wird der Vorgang abgebrochen und der zugehörige Wert zurückgegeben.

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é"

Ternärer Bedingungsoperator

Ternäre Operatoren erlauben es, if-Bedingungen in Ausdrücken statt in Anweisungsblöcken zu definieren. Das erinnert an Ansätze aus der funktionalen Programmierung und kann Code oft ausdrucksstärker und weniger fehleranfällig machen.

Der ternäre Operator kombiniert 3 Ausdrücke: eine Bedingung, gefolgt von einem Ausdruck, der ausgewertet und zurückgegeben wird, wenn die Bedingung wahr ist (der if-Teil, eingeleitet durch ?), und einem Ausdruck, der ausgewertet und zurückgegeben wird, wenn die Bedingung falsch ist (der else-Teil, eingeleitet durch :).

int a = 3, b = 4;
int max = a > b ? a : b;
// => 4

throw-Ausdrücke

throw-Ausdrücke sind eine Alternative zu throw-Anweisungen und können insbesondere die Ausdrucksstärke von ternären und anderen zusammengesetzten Ausdrücken erhöhen.

string trimmed = str == null ? throw new ArgumentException() : str.Trim();

Anleitung

Du sollst etwas Legacy-Code zu einer Wetterstation verbessern.

Die Wetterstation nimmt Messwerte entgegen und gibt einige Kennwerte wie Temperatur und Luftdruck aus.

1. Verbessere die Prägnanz und Lesbarkeit geeigneter Methoden

Refaktoriere geeignete Methoden der Klasse WeatherStation mit Ausdruckskörper-Membern. Nutze wo sinnvoll ternäre Operatoren und switch-Ausdrücke, um die Ausdruckskraft zu verbessern und möglicherweise Fehler zu reduzieren.

Stelle sicher, dass weiterhin alle Tests bestehen.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
C# Exercism

Bereit, mit The Weather in Deather zu starten?

Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.