zurück zum Artikel

Die Diskussionen um das Schlüsselwort "var" in C# gibt es immer noch

Der Dotnet-Doktor

Die Verwendung von "var" in C# ist keine untypisierte Programmierung und auch nicht automatisch ein schlechter Programmierstil.

Im Rahmen unseres Infotags zu .NET 2015 und C# 6.0 gestern in Essen[1] ist eine alte Diskussion unter den C#-Entwicklern wieder hochgekocht: Es gab eine Handvoll Teilnehmer, die die Dozenten massiv dafür kritisiert haben, dass sie das C#-Schlüsselwort var verwenden. Dies sei "untypisierte Programmierung" und auch "ganz schlechter Programmierstil".

var ist keine untypisierte Programmierung

Das Schlüsselwort var hat Microsoft mit C# 3.0 (also im Jahr 2007) eingeführt, und ich hatte gedacht, dass inzwischen alle C#-Softwareentwickler die Kenntnis haben, dass var keine untypisierte Programmierung ist und sich daher nicht mit dem Variant in Visual Basic oder dem var in JavaScript vergleichen lässt.

Mit var kann man die Schreibweise einer Variablendeklaration verkürzen. Statt

Kundenverwaltung.Kunde kunde = new Kundenverwaltung.Kunde();

kann man schreiben

var kunde = new Kundenverwaltung.Kunde();

Danach ist die Variable kunde genauso stark typisiert wie in der ersten Schreibweise. Keineswegs kann man danach die Variable kunde noch anders verwenden. Die Zuweisungen kunde = 1 oder kunde = "text" akzeptiert der C#-Compiler nicht mehr. Die Kritik, dass var eine "untypisierte Programmierung" sei, ist also haltlos.

Auch "ganz schlechter Programmierstil" ist die Verwendung von var nicht, denn Microsoft empfiehlt sogar in ihren "C# Coding Conventions (C# Programming Guide)"[2] die Verwendung von var in den gestern gezeigten Fällen wie dem obigen:

"Use implicit typing for local variables when the type of the variable is obvious from the right side of the assignment, or when the precise type is not important." Weiter heißt es dort: "Do not use var when the type is not apparent from the right side of the assignment". Dem stimme ich zu: Keineswegs sollte man immer var verwenden, und das haben die Dozenten gestern auch nicht getan. Sie haben entsprechend der "C# Coding Conventions" von Microsoft gearbeitet. Einen schönen Diskussionsbeitrag zu var, der die gestern gezeigte Verwendung unterstreicht, findet man auch hier: "Uses and misuses of implicit typing[3]".

Resharper warnt, wenn man nicht var verwendet

Coding-Style-Hilfsmittel, wie der etablierte Resharper für C#, erzeugen sogar eine Warnung (!) und schlagen eine Korrektur vor, wenn man var nicht verwendet:

Resharper warnt, wenn man "var" nicht verwendet


Der Resharper-Hersteller JetBrains hat schon 2008 diese Warnung ausführlich begründet[4] und kommt zu dem Schluss "improve the way your code speaks for itself".

Tatsächlich wird die Lesbarkeit des Programmcodes durch var oft besser:

Schlecht:

Dictionary<int, Dictionary<int, Kunde>> dictionary 
= new Dictionary<int, Dictionary<int, Kunde>>();

Besser:

var dictionary = new Dictionary<int, Dictionary<int, Kunde>>(); 

Genau betrachtet sind diejenigen, die var nicht mögen, eine kleine Minderheit, wie man an nur 8 (sic!) Stimmen für den Vorschlag, eine StyleCop-Regel "Abuse of the 'var' keyword" einzuführen, sieht. Diese Minderheit sollte tolerieren, dass sich die Mehrheit an die C# Coding Conventions hält.

Der .NET 2015-Infotag findet am 11. Mai nochmals in München[5] statt. Ich bin gespannt, ob dort var auch wieder ein Thema sein wird.


URL dieses Artikels:
http://www.heise.de/-2583227

Links in diesem Artikel:
[1] http://www.it-visions.de/produkte/Seminare/Infotage
[2] https://msdn.microsoft.com/en-us/library/ff926074.aspx
[3] http://blogs.msdn.com/b/ericlippert/archive/2011/04/20/uses-and-misuses-of-implicit-typing.aspx
[4] http://resharper.blogspot.de/2008/03/varification-using-implicitly-typed.html
[5] http://www.it-visions.de/produkte/vortragsdetails.aspx?v=8035