Zerowy operator koalescencyjny (??)
Osobiście nie widzę żadnych wad korzystania z tego operatora. Rozważ następujące trzy przykłady kodu, od „łatwych” do „złożonych” nowych operatorów.
Bez magii:
bool isNameSet = false;
string name;
if ( isNameSet )
{
Console.WriteLine( name );
}
else
{
Console.WriteLine( "No name set." );
}
Operator trójskładnikowy:
bool isNameSet = false;
string name;
Console.WriteLine( isNameSet ? name : "No name set." );
Brak koalescencji:
string name = null;
Console.WriteLine( name ?? "No name set." );
Powodem, dla którego wymyślono te operatory, jest to, że reprezentują one bardzo popularne operacje programistyczne . Nie chcę ich używać, ponieważ nie jesteś do nich przyzwyczajony, to tylko upór . Języki ewoluują, funkcje ewoluują, naucz się ich używać!
słowo kluczowe var
Mam nieco inne zdanie na temat słowa kluczowego var. Typ zmiennej często zapewnia dodatkowe informacje o kodzie. Uważam, że ukrywanie typu za pomocą słowa kluczowego var czasami sprawia, że kod jest mniej czytelny. Wiesz mniej, czego się spodziewać, bez korzystania z automatycznego uzupełniania lub najechania kursorem na identyfikatory, aby zobaczyć, jakie są w rzeczywistości. Moim zdaniem powoduje to, że kod jest wolniejszy do odczytu / zapisu.
Używam tego słowa kluczowego, gdy okazuje się, że ten typ nie zawiera wielu dodatkowych informacji.
- Głównie w pętlach Foreach , których nauczyłem się od Resharpera, ponieważ jest to tam ustawienie. Przez większość czasu wiesz, jaki rodzaj kolekcji przemierzasz, więc wiesz, że oczekujesz przedmiotów z tej kolekcji.
- Zapytania Linq . Rezultatem zapytań linq są często bardzo złożone typy ogólne. Wyświetlenie tego typu powoduje więcej szkody niż pożytku.
- Długie nazwy maszynowe, które są po prostu inicjowane ich konstruktorem. Możesz już powiedzieć, jaki jest typ, patrząc na konstruktor.
Jako przykład ostatniej instrukcji:
ThisIsSomeSpecializedTypeRightHere duplication =
new ThisIsSomeSpecializedTypeRightHere();
var justAsReadable =
new ThisIsSomeSpecializedTypeRightHere(); // Less duplication.
// But I still prefer the following ...
int number = 9;
SomeCreatedType foo = Factory.CreateSomeType();
??
zerowego operatora koalescencji po jego wyjaśnieniu, nie powinien być dozwolony w pobliżu kodu produkcyjnego.