Rät Microsoft von der Verwendung von "var" in C # ab? (VS2017)


15

Ich freue mich auf das kommende Visual Studio 2017 .

Im Abschnitt mit dem Titel Boosted Productivity wird ein Image von Visual Studio verwendet, um alle Vorkommen von var durch den expliziten Typ zu ersetzen .

gesteigerte Produktivität VS2017

Der Code weist anscheinend mehrere Probleme auf, die Visual Studio als "Bedarfsbehebung" identifiziert hat.

Ich wollte mein Verständnis der Verwendung von var in C # überprüfen, also las ich einen Artikel von Eric Lippert aus dem Jahr 2011 mit dem Titel Uses and misuses of implicit typing .

Eric sagt:

  • Verwenden Sie var, wenn Sie müssen; Wenn Sie anonyme Typen verwenden.
  • Verwenden Sie var, wenn der Typ der Deklaration aus dem Initialisierer ersichtlich ist, insbesondere wenn es sich um eine Objekterstellung handelt. Dies eliminiert Redundanz.
  • Ziehen Sie die Verwendung von var in Betracht, wenn der Code den semantischen "Geschäftszweck" der Variablen betont und die "mechanischen" Details ihres Speichers herunterspielt.
  • Verwenden Sie explizite Typen, wenn dies erforderlich ist, damit der Code richtig verstanden und verwaltet wird.
  • Verwenden Sie beschreibende Variablennamen, unabhängig davon, ob Sie "var" verwenden. Variablennamen sollten die Semantik der Variablen darstellen, nicht die Details ihrer Speicherung. "DecimalRate" ist schlecht; "InterestRate" ist gut.

Ich denke der Großteil der var- Nutzung im Code ist wahrscheinlich in Ordnung. Ich denke, es wäre in Ordnung, var nicht für das Bit zu verwenden, das liest ...

var tweetReady = workouts [ ... ]

... weil es vielleicht nicht 100% sofort ist, um welchen Typ es sich handelt, aber selbst dann weiß ich ziemlich schnell, dass es sich um einen handelt boolean.

Die var Verwendung für diesen Teil ...

var listOfTweets = new List<string>();

... sieht für mich genauso aus wie eine gute Verwendung von var, da ich denke, dass es überflüssig ist, Folgendes zu tun:

List<string> listOfTweets = new List<string>();

Obwohl basierend auf Eric sagt, sollte die Variable wahrscheinlich eher Tweets als listOfTweets sein .

Was wäre der Grund, die gesamte varVerwendung hier zu ändern ? Stimmt etwas mit diesem Code nicht, den ich vermisse?


Der Code im Screenshot ist genau die Art von Dingen, mit denen Sie sich einverstanden erklären, dass var nicht verwendet werden sollte ... Erläuterung?
Telastyn

1
Ich denke, dass alle Verwendungen von varhier in Ordnung sind. Sie könnten möglicherweise eine ändern - aber selbst dann denke ich, dass es nicht wirklich notwendig ist. Warum alle in expliziten Typ ändern?
Rowan Freeman

2
Denken Sie daran, dass das, was für Menschen offensichtlich ist, für Visual Studio nicht immer offensichtlich ist.
candied_orange

Alle? Sie haben einen Fehler im Screenshot, der eindeutig mit var zusammenhängt.
Telastyn

Nun, es ist kein Fehler als solcher, sondern eine Warnung der Art, auf die ein Linter hinweisen würde. Dem Bild zufolge wurden alle varsauf die gleiche Weise markiert. daneben das gleiche warnende Kreuz und eine rote Unterstreichung. Vermutlich möchte Visual Studio sie alle auf die gleiche Weise korrigieren. Es sei denn, ich irre mich.
Rowan Freeman

Antworten:


26

TL; DR: Nein, Microsoft rät nicht von der Verwendung von 'var' in C # ab. Dem Bild fehlt einfach der Kontext, um zu erklären, warum es sich beschwert.

Wenn Sie VS2017 RC installieren und das Optionsfenster öffnen und gehen Sie zu Text Editor -> C#, werden Sie einen neuen Abschnitt sehen: Code Style. Dies ähnelt dem, was ReSharper seit einiger Zeit anbietet: Eine Reihe konfigurierbarer Regeln für Codierungsstile.

Es enthält drei Optionen für die Verwendung von var: für eingebaute Typen, wenn der Variablentyp sichtbar ist, und "Anderswo". In jedem Fall können Sie "Expliziten Typ bevorzugen" oder "Var bevorzugen" angeben und die Benachrichtigungsstufe auf "Keine", "Vorschlag", "Warnung" oder "Fehler" setzen:

Bildbeschreibung hier eingeben


3
Was ist die Standardeinstellung? Wenn die "Werkseinstellung" "Expliziten Typ bevorzugen" ist, kann man davon ausgehen, dass MS die Verwendung von nicht empfiehlt var.
JacquesB

@JacquesB, die Standardeinstellungen sind in der Abbildung dargestellt. Da alle auf "Keine" gesetzt sind, ist es schwierig zu wissen, ob "Expliziten Typ bevorzugen" aktiv als bevorzugter Weg von MS gesetzt ist oder ob dies nur der "Nullwert" ist. Was mich betrifft, sind die besten Entwickler alle angetan var, daher ist es mir egal, welche Ansichten die MS in dieser Angelegenheit vertreten.
David Arno

6

Ich denke, Sie lesen zu viel hinein. Es gibt also eine Funktion, mit der Sie die Verwendung der impliziten Typisierung durch explizite Typanmerkungen ersetzen können, und Sie schließen daraus, dass die implizite Typisierung nicht empfohlen wird. Es gibt auch eine Funktion zum Kompilieren von C♯ zu CIL-Bytecode. Würden Sie daraus schließen, dass C♯ nicht empfohlen wird und wir alle stattdessen CIL-Bytecode schreiben sollten? Wahrscheinlich nicht.

Microsoft demonstriert lediglich das tiefe Verständnis, das die IDE für Ihren Code besitzt. Es kann sogar Ihre Typen für Sie schreiben, ohne dass Sie sie buchstabieren müssen. Das ist es.

Dies ist einfach ein gutes Beispiel für die Demonstration der Codeverständnisfähigkeiten der IDE. Es ist klein und in sich geschlossen (im Gegensatz zu einem größeren Refactoring), es ist in allen Editionen verfügbar und für alle Entwickler anwendbar (im Gegensatz zu einigen der zugegebenermaßen sehr eindrucksvollen Architekturvisualisierungsfunktionen, die nur in Ultimate verfügbar sind und für einen wesentlichen Teil nicht anwendbar sind) der potenziellen Benutzer von VS, die niemals so große Projekte haben werden), und obwohl es sehr einfach ist (es tut buchstäblich genau das, was csc.exees seitdem getan hat)varEs sieht auf jeden Fall beeindruckend aus, vor allem für jemanden, der implizite Typisierung und Typinferenz nicht wirklich versteht (oder der versucht, "Typinferenz" zu googeln und mit Begriffen wie Hindley-Milner, Vereinheitlichung und Backtracking überfordert ist, wenn überhaupt C )s Inferenz nur auf lokaler Ebene ist äußerst einfach und unkompliziert).

Kurz gesagt: Es ist eine auffällige Art, eine IDE-Funktion zu präsentieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.