Null-Koaleszenzoperator (??)
Persönlich sehe ich keine Nachteile bei der Verwendung dieses Operators. Betrachten Sie die folgenden drei Codebeispiele, von "einfachen" bis "komplexen" neuen Operatoren.
Ohne Magie:
bool isNameSet = false;
string name;
if ( isNameSet )
{
Console.WriteLine( name );
}
else
{
Console.WriteLine( "No name set." );
}
Ternärer Operator:
bool isNameSet = false;
string name;
Console.WriteLine( isNameSet ? name : "No name set." );
Null-Koaleszenz:
string name = null;
Console.WriteLine( name ?? "No name set." );
Der Grund, warum diese Operatoren erfunden wurden, ist, dass sie sehr häufige Programmiervorgänge darstellen . Sie nicht benutzen zu wollen, weil Sie nicht an sie gewöhnt sind, ist nur hartnäckig . Sprachen entwickeln sich, Funktionen entwickeln sich, lernen, sie zu benutzen!
var Schlüsselwort
Ich habe eine etwas andere Meinung über das Schlüsselwort var. Der Typ einer Variablen enthält häufig zusätzliche Informationen zu Ihrem Code. Wenn ich den Typ mit dem Schlüsselwort var verstecke, ist der Code manchmal weniger lesbar. Sie wissen weniger, was Sie erwarten können, wenn Sie die automatische Vervollständigung nicht verwenden oder den Mauszeiger über die Bezeichner halten, um zu sehen, was diese tatsächlich sind. Meiner Meinung nach führt dies zu Code, der langsamer zu lesen / schreiben ist.
Ich verwende das Schlüsselwort, wenn ich feststelle, dass der Typ nicht viele zusätzliche Informationen enthält.
- Hauptsächlich in foreach-Schleifen , die ich von Resharper gelernt habe, da es sich um eine Einstellung handelt. In den meisten Fällen wissen Sie, welche Art von Sammlung Sie gerade durchlaufen, sodass Sie wissen, dass Sie Elemente aus dieser Sammlung erwarten.
- Linq-Abfragen . Das Ergebnis von Linq-Abfragen sind oft sehr komplexe generische Typen. Das Anzeigen dieses Typs schadet mehr als es nützt.
- Lange Typnamen, die einfach mit ihrem Konstruktor initialisiert werden. Anhand des Konstruktors können Sie bereits erkennen, um welchen Typ es sich handelt.
Als Beispiel für die letzte Aussage:
ThisIsSomeSpecializedTypeRightHere duplication =
new ThisIsSomeSpecializedTypeRightHere();
var justAsReadable =
new ThisIsSomeSpecializedTypeRightHere(); // Less duplication.
// But I still prefer the following ...
int number = 9;
SomeCreatedType foo = Factory.CreateSomeType();
??
Null-Coalesce-Operator nicht verstehen kann, nachdem er erklärt wurde, sollte er nicht in der Nähe von Produktionscode zugelassen werden.