Auf dem Weg zu C# 7: Sprachfeatures und Entwicklungsprozess

Seite 3: Fundamentale Sprachmerkmale

Inhaltsverzeichnis

Neben der Darstellung der Themenkomplexe ging das Design-Team auf fundamentale Sprachmerkmale ein, die zur Betrachtung und Umsetzung der oben genannten Features grundlegend sind. Für den Umgang mit Typen ist beispielsweise ein umfassendes Pattern Matching Framework vorgesehen. Beim Pattern Matching (= Musterabgleich) geht es um das Suchen diskreter Strukturen oder Teilstrukturen auf Grundlage von Symbolen. Ein prominentes Beispiel ist wohl die Wildcard-Suche in Zeichenketten. Im Kontext von C# geht es allerdings um Daten und Datentypen: Man möchte herausfinden, ob Daten eine bestimmte Form aufweisen, und sie im Anschluss extrahieren. Das Augenmerk dabei liegt auf dem is-Operator und der switch-Anweisung. Ergebnis beider Befehle ist ein Boolescher Wert, der angibt, ob das Muster passt oder nicht. Wenn ja, dann sollen die im Muster verwendeten Variablen im gesamten Scope der Anweisung Gültigkeit besitzen. Die folgenden Beispiele verdeutlichen dies.

Zuerst einmal für den [i]is[]/i]-Operator, der auf folgende Art verwendet werden könnte:

if (o is Point(*, 5) p) Console.WriteLine(o.x); 
if (o is Point p) Console.WriteLine(p.x);
if (p is (var x, 5) ...

Für die switch-Anweisung könnte das Pattern Matching wie folgt aussehen:

switch (o) {
case string s:
Console.WriteLine(s);
break;
case int i:
Console.WriteLine($"Number {i}");
break;
case Point(int x, int y):
Console.WriteLine("({x},{y})");
break;
case null:
Console.WriteLine("<null>);
break
}

Ein weiteres interessantes Sprachmerkmal sind die Methodenverträge. Die aus dem Microsoft-Forschungsprojekt Spec# hervorgegangenen Annotationen für Vor- und Nachbedingungen für Methoden sind sehr umfangreich und bereits voll in das .NET Framework integriert. Allerdings erzeugt die Art der Umsetzung mittels Attributen relativ unschönen Code. Daher wäre eine Integration direkt in die Sprachsyntax wünschenswert. Das würde wiederum die volle Integration in die Laufzeitumgebung ermöglichen, wo der volle Funktionsumfang zur Geltung käme. Führt man sich weiterhin den Code vor Augen, den man zum Prüfen von Werten von Parametern schreibt, so reduzieren in Sprachen integrierte Methodenverträgen derartigen Code. Methodenimplementierungen werden sauberer und besser lesbar. Ein weiterer Vorteil, der mit dieser Spracherweiterung einhergeht, ist die Möglichkeit, Metadaten zu generieren. Letztere lassen sich dann im Tooling der Sprache anzeigen und verwenden. Das folgende Beispiel zeigt, wie Methodenverträge aussehen können:

public void Remove(string item)
requires item != null
ensures Count >= 0
{
...
}

Im ersten Design Meeting zu C# 7 hat das Microsoft-Team den offenen Entwicklungsprozess wieder ein Stück vorangetrieben, um die Community weiter in die Entwicklung der Sprachplattform zu integrieren. Neben Grundlagen zum weiteren Vorgehen zeigte das Team technische Themenbereiche auf, anhand derer die Entwicklung stattfinden soll. Der Umgang mit Daten, die Performance, die Robustheit von Programmen und die Codequalität haben dabei eine hohe Bedeutung. Es bleibt abzuwarten, was das Team aus seinen Plänen macht und inwieweit die Community tatsächlich Einfluss auf die Sprachplattform nehmen wird.

Robin Sedlaczek
hat 15 Jahre Erfahrung als professioneller Softwareentwickler, leitete einige Softwareprojekte und arbeitet seit 4 Jahren als CTO bei der Fairmas GmbH. In seiner Freizeit vermittelt er sein Wissen in Fachvorträgen, Onlinekursen, Fachartikeln und in seinem Blog.
(jul)