Laden...

Warum wird bei diesem Tutorial Var benutzt?

19 Antworten
2,495 Aufrufe
Letzter Beitrag: vor 15 Jahren
Warum wird bei diesem Tutorial Var benutzt?

Hallo Community!

Ich bin dabei mir ASP.Net MVC 2 näher zu bringen bzw generell MVC mit ASP.Net und schau mir das Tutorial von hier an. Gefällt mir auch ganz gut, nur ist auf dieser Seite auf der Hälfte folgender Code:


public ActionResult Index()
{
    // Create a list of genres
    var genres = new List<string> {"Rock", "Jazz", "Country", "Pop", "Disco" };
 
    // Create our view model
    var viewModel = new StoreIndexViewModel {
        NumberOfGenres = genres.Count(),
        Genres = genres
    };
 
    return View(viewModel);
}

Darunter steht noch schön:

Note: If you're unfamiliar with C#, you may assume that using var means that our viewModel variable is late-bound. That's not correct - the C# compiler is using type-inference based on what we're assigning to the variable to determine that viewModel is of type StoreIndexViewModel and compiling the local viewModel variable as a StoreIndexViewModel type, so we get compile-time checking and Visual Studio code-editor support.

Mir ist auch durchaus bewusst was er daraus schreibt, nur ich sehe dort überhaupt keinen Grund var zu benutzen. Ich habe bis jetzt sowieso eigentlich nie var benutzt weil ich noch keinen expliziten Fall hatte wo ich es bräuchte, aber gibt es vielleicht einen Sinn das hier zu benutzen? Ich meine wofür? Ich fande das eigentlich immer ganz gut den "richtigen" Typ hinzuschreiben.

Viele Grüße,

Kaji

Hallo,

im Prinzip ist es egal. Aber das verstehst du ja.

Vielleicht ist der Schreiber des Beitrags faul oder empfindet var als leserlicher da alle Variablen einheitlich (von links gesehen) da stehen, etc.
Grunsätzlich kann diese Frage aber nur der Autor beantworten 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Man muss nie var benutzen, es ist nur geschickt bei längeren Klassenbezeichnungen.

ObservableCollection<MeineSelbstErstellteKlasse> a = new ObservableCollection<MeineSelbstErstellteKlasse>();
var a = ObservableCollection<MeineSelbstErstellteKlasse>();

Obwohl var meines Erachtens die Lesbarkeit des Codes verschlechtert.

Gruß Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Hallo,

naja dann hat sich ja meine Vermutung bestätigt, strange warum er das tut, aber naja oO Also bei Linq hat var durchaus seine berechtigung aber sonst..^^ Wüsste ich da auch nicht viel 😄

Viele Grüße,

Kaji

Hallo xxMUROxx,

Sinn von Zweck von var ist nicht zwingend das verkürzen bei generischen Typen. var dient in erster Linie für das Deklarieren bei anonymen Typen und Abfragen mit LINQ.

Siehe auch: Anonyme Typen (C#-Programmierhandbuch).

zero_x

Hallo zero_x,

für das Deklarieren bei anonymen Typen und Abfragen mit LINQ

Ohne anonyme Typen keine Abfragen mit LINQ => das geht Hand in Hand 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Man muss nie var benutzen[...]

Doch, bei anonymen Typen. Da hast du keine andere Wahl.

Zur Diskussion über var siehe auch Nutzung von var vorteilhaft?

Obwohl var meines Erachtens die Lesbarkeit des Codes verschlechtert.

finde ich nicht. eher im gegenteil. was bringt es mir auch, den typ mehrfach in einer zeile zu sehen, einmal bei der deklaration und dann beim erzeugen des objekts? unnötige redundanz ist das..

Doch, bei anonymen Typen. Da hast du keine andere Wahl.

Stimpt, da ich anonyme Typen selten verwende hab ich nicht an das gedacht.

finde ich nicht. eher im gegenteil [...] unnötige redundanz ist das..

Ansichtssache 😁

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

wo ist das ansichtssache? wenn du in EINER zeile beim erzeugen eines objekts dessen typ ZWEIMAL drinstehen hast, ist das dann keine redundanz? ob es einem so oder so besser gefällt mal außen vorgelassen, aber die redundanz (die implizit unnötig ist) kannst du ja kaum von der hand weisen? 😁

In dieser Hinsicht hast du recht, aber wenn ich eine Variable deklariere und diese z.B. durch eine Methode initialisiert wird, ist der genaue Typ aussagender (Auch wenn man es mit der Signatur der Methode herausfindet). 😁

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

In dieser Hinsicht hast du recht, aber wenn ich eine Variable deklariere und diese z.B. durch eine Methode initialisiert wird, ist der genaue Typ aussagender (Auch wenn man es mit der Signatur der Methode herausfindet). 😄

das ist wieder ein anderes beispiel.

aber selbst bei methoden benutze ich var. warum? naja, erstens weil ich mir var mal angewöhnt habe und zweitens nie wirklich probleme damit hatte. ich meine, leserlich ist der code ja nicht unbedingt dann, wenn du alle typen und alle internen details weißt, sondern wenn man, je nach abstraktionsstufe auf der man sich befindet, schnell den überblick bekommt, WAS der code macht. dafür braucht es eher semantische klarheit denn syntaktische. und da spielen dann die methoden- und vaariablenbezeichnungen eine größere rolle.

beispiel:

var connection = new SqlConnection(connectionString);
var command = connection.CreateCommand();

welchen vorteil hat hier diese variante?

SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = connection.CreateCommand();

ich habe ein connection-objekt und ein command-objekt. von welchem konkreten typ die sind, interessiert mich an dieser stelle einfach nicht. weil ich nämlich weiß, was ich in diesem rahmen (ado.net) mit den objekten machen kann.

Hallo zusammen

Habt ihr die Meinungen aus Nutzung von var vorteilhaft? gelesen?

ich meine, leserlich ist der code ja nicht unbedingt dann, wenn du alle typen und alle internen details weißt, sondern wenn man, je nach abstraktionsstufe auf der man sich befindet, schnell den überblick bekommt, WAS der code macht. dafür braucht es eher semantische klarheit denn syntaktische. und da spielen dann die methoden- und vaariablenbezeichnungen eine größere rolle.

Da bin ich anderer Meinung. "Schnell einen Überblick bekommen" ist etwas anderes, als "Auf den ersten Blick alles erkennen".
Klar hast du auch teilweise recht, das noch die Logik und Semantik aufgenommen werden muss, aber das kannst du erst komplett machen, wenn du den Code an sich analysiert hast.

Das Beispiel hinkt auch ein wenig.
Bei var wtf = connection.CreateCommand() sehe ich überhaupt nicht, von welchm Typ die Variable "wtf" ist.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

Wtf sollte aber zum Beispiel aus der Bennenung und dem Context eindeutig hervorgehen, denke ich.

Ich machs aber auch selten, wo auf jeden Fall sind bei so ewig langen Generics oder linq abfragen:


var query = from i in data
                  orderby i.test;

ist einfach besser als


IOrderedEnumerable<MyData> query = ...

finde ich.

Eigentlich ist es das Thema eh nicht wert, dass man darüber diskutiert. Ist der Code insgesamt clean, spielt es keine Rolle ob var oder nicht und wenn nicht ist eh Hopfen und Malz verloren.

Hallo Leute 😃

Das Thema ist jetzt auch etwas aus dem ruder gelaufen..^^ Mich hatte schlicht interessiert ob es in der Web welt da ein speziellen Grund gibt das man var nimmt für irgendwas ..^^ Nicht der Sinn oder Unsinn es zu benutzen..^^ Es war mir einfach nur im Tut aufgefallen..^^ Die Diskussion die hier auf kommt war ja schon in dem anderen Thread eigentlich diskutiert..^^

Viele Grüße,

Kaji

Hallo Kaji, hallo zusammen,

der Typ einer Anwendung spielt bei der Frage keine Rolle.

Ansonsten denke ich wie du, dass hier und in dem anderen Thread bereits alles gesagt wurde. Bis zu einem gewissen Grad ist es ohnehin eine Geschmacksfrage und in Geschmacksfragen wird man eh keine endgültige Einigung erzielen. Da die wesentlichen Argumente jedoch bereits genannt sind, kann jeder fundiert selbst entscheiden, wie er es halten will.

herbivore

Das Beispiel hinkt auch ein wenig.
Bei var wtf = connection.CreateCommand() sehe ich überhaupt nicht, von welchm Typ die Variable "wtf" ist.

ich finde nicht, dass mein beispiel hinkt. und gerade dein gegenbeispiel unterstützt ja noch meine aussage. nämlich, dass man sich bei verwendung eben auch gedanken um die variablenbezeichnung machen muss (und bei eigenen klassen eben auch um die methodennamen). wenn ich bei uns im code so eine zeile sehen würde wie du sie gepostet hast (eine variable namens "wtf"), wäre das sofort ein refactoring-schritt für mich. ernsthaft, sowas darf's im code nicht geben. außerdem: wenn ich einen codeausschnitt lese, bei dem eine variable verwendet wird, dessen initialisierung man in diese teil nicht sieht, hab ich wieder das gleiche problem. einen gescheiten namen brauch ich also so oder so. und var zwingt einen eben schon direkt beim initialisieren der variable dazu. 🙂

Dazu hätte ich mal noch eine Frage:
Warum empfiehlt ReSharper 5 in den Standarteinstellungen immer das Schlüsselwort var anstatt des Typ zu verwenden. ReSharper 5 empfiehlt immer implizite Variablendeklerationen zu verwenden!
Grüße Chris

Einfach weil es kürzer ist und damit den Code übersichtlicher und kürzer macht. Wurde doch alles schon weiter oben beschrieben. Der Resharper 4.5 macht das übrigens auch - sehr angenehm.