Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.08.2020, 11:54

c# und var - oder, der Versuch zu mehr Gedankenaustausch anzuregen

Hallo :)

Wir alle hier teilen mehr oder weniger das gleiche Hobby/Leidenschaft. Es gibt sicherlich viele Gründe warum die meisten von uns es aufgegeben haben, über Entwicklungs-Dinge, sich mit andern Leuten großartig zu unterhalten. Was mich angeht, liegt es absolut NICHT an diesem Forum, sondern an sehr enttäuschenden Erfahrungen in diversen Foren in den letzten 20 Jahren. Doch ich würde es schön finden, wenn es mehr Gelegenheiten/Themen geben würde, über die wir uns austauschen könnten. Nicht nur das es sicherlich viel spaß machen würde über Gamedev/design zu unterhalten, würde es auch helfen die Motivation fürs eigene Projekt hoch zu halten, und andere Gedanken/Ideen/Ansichten helfen auch immer das man selber dazu lernt und besser wird.

Nun aus dem nichts heraus, ist es schwer/blöd ein Thema zu finden. Doch mit einem Kollegen kahm ich heute zufällig auf das Thema „var in c#“ … konnte für mich das Thema aber noch nicht befriedigend abschließen… also dachte ich mir, dies wäre vielleicht etwas, über das wir uns hier unterhalten könnten, um „das Eis zu brechen“… als Anfang so zusagen, um die Türe auf zu stoßen für hoffentlich viele unterschiedliche kommende Diskussionen.

In diesem Sinne… auch wenn das Thema euch vielleicht anödet… wäre trotzdem schön, wenn ihr was dazu schreibt ;)

Bei „var“ kommt es mir nun zunehmend so vor, dass es vor allem (ziemlich nur?) die Leute begeistert, die viel LINQ benutzen. Was ich aber schon außerhalb der Spieleentwicklung nicht so gerne verwende, und in der Spieleentwicklung erstrecht nicht. Daher interessiert mich nun eure Meinung auch so sehr :)


Für diejenigen die es mit c# nicht so haben:
var ist ein Schlüsselwort und wird benutzt wie ein Typ Bezeichner (int, float, long, string usw.) wenn man eine neue Variable initialisiert.

C#-Quelltext

1
2
3
4
5
6
7
8
9
int hitPoints = 100;
float speed = GetCurrentSpeed();
ShipTechno.ShipComponent shield = new ShipTechno.ShipComponent(ShipTechno.ShipComponent.Typ.Shield);

// kann mit var abgekürzt werden zu:

var hitPoints = 100;
var speed = GetCurrentSpeed();
var shield = new ShipTechno.ShipComponent(ShipTechno.ShipComponent.Typ.Shield);

Das letzte Beispiel ist zwar nun sehr konstruiert… doch es soll hervorheben wie var helfen kann, gerade bei den „umständlich langen Typen“ wo das doppelt schreiben (links und rechts vom = Zeichen) besonders nervt.

Wichtig an var ist: Es ist streng Typisiert! Es ist also kein „Variant“ welche ohne festen Typ wäre oder zur Laufzeit verschiedene Typen annehmen könnte! Sondern var wird vom Compiler unmittelbar in den echten Typ „ersetzt“. Also so in etwa wie bei c/c++ der Preprocessor mit #define etwas unmittelbar „ersetzt“. var dient nur dazu, den Code minimal zu kürzen/klarer zu machen. Bzw. dazu soll es dienen (doch genau hierüber gehen die Meinungen auseinander -> das halte ich für Diskussionswürdig). Mit var sagt man sozusagen zum Compiler: „du siehst doch was ich rechts hinschreibe mit welchem Wert ich die neue Variable initialisiere, also ist doch auch klar was für ein Typ die Variable ist, muss ich das jetzt echt nochmals wiederholen und für dich doppelt schreiben!?“

Wo seht ihr Vorteile, Nachteile, macht es den Code insgesamt lesbarer, oder eher unklarer?

Auch macht var sicherlich öfters keinen Sinn, also müsste man selbst wenn man wollte, es „mal so und mal so schreiben“.
Was denkt ihr über diesen nicht vermeidbaren Mix?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Audori« (27.08.2020, 12:00)


Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

27.08.2020, 15:58

Also ich sehe keinen Mehrwert daran ständig irgendwelche Typen dazuzuschreiben. Der Typ interessiert mich nämlich eigentlich nur recht selten und ist ansonsten nur clutter, den ich dann eh vorm geistigen Auge ausblenden müsste.
Wenn die Variablen vernünftig benannt sind, dann ist der Typ auch egal, weil es dann nur um die Rolle der Variable geht.

Insbesondere natürlich bei langen Typnamen, die dann vielleicht auch noch Generics haben, wird es dann ziemlich unleserlich.
Und weil ich keinen Grund sehe, Typen und var zu mixen, hab ich R# grundsätzlich so eingestellt, dass immer var verwendet wird und fertig.

Mich würde mal ein Fall interessieren, bei dem du sagst, dass var keinen Sinn macht.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

27.08.2020, 16:10

Vielleicht ist sowas gemeint:

C#-Quelltext

1
var x = (byte)100;

vs.

C#-Quelltext

1
byte x = 100;

LInsoDeTeh

Treue Seele

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

4

27.08.2020, 17:15

Für mich ist das primär eine Sache der Leserlichkeit. Wenn ich mehrere Variablen untereinander deklariere und auch direkt zuweise, macht es das einheitliche Verwenden von var zusammen mit sprechenden Variablennamen einfach leserlicher, als wenn die Typbezeichnungen davor unterschiedlich lang sind (bei Generika unter Umständen sogar ziemlich lang).
Ein zweiter Punkt ist weniger aufwändigeres Refactoring. Man muss halt nur eine Typbezeichnung ändern und nicht zwei. Das passiert bei der Verwendung von LINQ relativ häufig, dass man da noch mal ein Query umbaut und der jeweilige Rückgabetyp der Einzelschritte sich dadurch ändert, daher ist das vermutlich auch bei LINQ-Liebhabern so beliebt, wie du sagst.
Ich finde es aber aus oben genannten Gründen auch außerhalb von LINQ besser, da das Objekt ja explizit typisiert bleibt (var nicht mit object verwechseln) und man dadurch nichts verliert.

David hat in seinem Beispiel geschickterweise genau den einzigen Typ rausgesucht, der kein Suffix für die Initialisierung hat. Bei anderen numerischen Variablen wie beispielsweise Long würde ich das ebenfalls so schreiben:

C#-Quelltext

1
var myNumber = 100L;

anstelle von

C#-Quelltext

1
long myNumber = 100;

Werbeanzeige