Patrzę na nadchodzące Visual Studio 2017 .
W sekcji zatytułowanej Zwiększona wydajność znajduje się obraz Visual Studio używany do zastąpienia wszystkich wystąpień var jawnym typem.
Kod najwyraźniej ma kilka problemów, które Visual Studio zidentyfikowało jako „wymaga naprawy”.
Chciałem dokładnie sprawdzić moje rozumienie użycia var w C #, więc przeczytałem artykuł z 2011 roku autorstwa Erica Lipperta zatytułowany Zastosowania i niewłaściwe użycie niejawnego pisania .
Eric mówi:
- Użyj var, kiedy musisz; gdy używasz anonimowych typów.
- Użyj var, gdy typ deklaracji jest oczywisty z inicjalizatora, szczególnie jeśli jest to tworzenie obiektu. To eliminuje redundancję.
- Rozważ użycie var, jeśli kod podkreśla semantyczny „cel biznesowy” zmiennej i lekceważy „mechaniczne” szczegóły jej przechowywania.
- Użyj jawnych typów, jeśli jest to konieczne do poprawnego zrozumienia i utrzymania kodu.
- Używaj opisowych nazw zmiennych niezależnie od tego, czy używasz „var”. Nazwy zmiennych powinny reprezentować semantykę zmiennej, a nie szczegóły jej przechowywania; „DecimalRate” jest złe; „Odsetki” są dobre.
Myślę, że większość użycia var w kodzie jest prawdopodobnie w porządku. Myślę, że byłoby dobrze nie używać var dla bitu, który czyta ...
var tweetReady = workouts [ ... ]
... bo może nie jest w 100% natychmiastowy, jaki to typ, ale nawet wtedy dość szybko wiem, że to jest boolean
.
Var Wykorzystanie tej części ...
var listOfTweets = new List<string>();
... wygląda mi dokładnie na dobre użycie var, ponieważ uważam, że jest zbyteczne wykonywanie następujących czynności:
List<string> listOfTweets = new List<string>();
Mimo że na podstawie tego, co mówi Eric, zmienna powinna być raczej tweetami niż listOfTweetami .
Jaki byłby powód zmiany całego var
wykorzystania tutaj? Czy coś jest nie tak z tym kodem, którego mi brakuje?
źródło
var
tutaj są w porządku. Możesz ewentualnie zmienić jeden - ale nawet wtedy myślę, że nie jest to naprawdę konieczne. Po co zmieniać je wszystkie na wyraźne?vars
zostały oznaczone w ten sam sposób; z tym samym ostrzegawczym krzyżem obok nich i czerwonym podkreśleniem. Przypuszczalnie Visual Studio chce je wszystkie poprawić w ten sam sposób. Chyba że się mylę.Odpowiedzi:
TL; DR: nie, Microsoft nie zniechęca do używania „var” w C #. Obrazowi brakuje kontekstu, aby wyjaśnić, dlaczego narzeka.
W przypadku zainstalowania VS2017 RC i otworzyć panel Opcje i przejdź do
Text Editor -> C#
zobaczysz nową sekcję:Code Style
. Jest to podobne do tego, co oferował ReSharper od pewnego czasu: zestaw konfigurowalnych reguł stylów kodowania.Zawiera trzy opcje dotyczące użycia
var
: dla typów wbudowanych, gdy typ zmiennej jest widoczny i „Gdzie indziej”. W każdym przypadku możesz określić „preferuj typ jawny” lub „preferuj var” i ustaw poziom powiadomień na „brak”, „sugestia”, „ostrzeżenie” lub „błąd”:źródło
var
.var
, więc nie obchodzi mnie, jakie są poglądy państw członkowskich w tej sprawie.Myślę, że za dużo w to czytasz. Tak więc istnieje funkcja, która pozwala zastąpić użycie pisania niejawnego wyraźnymi adnotacjami typu, z czego można wywnioskować, że nie zaleca się pisania niejawnego. Istnieje również funkcja kompilacji C♯ do kodu bajtowego CIL. Czy wyciągnąłbyś z tego wniosek, że C♯ jest odradzane i wszyscy powinniśmy zamiast tego napisać bajt CIL? Prawdopodobnie nie.
Microsoft po prostu pokazuje głębokie zrozumienie IDE twojego kodu. Może nawet napisać dla Ciebie typy bez konieczności ich przeliterowania. Otóż to.
To po prostu dobry przykład pokazania możliwości rozumienia kodu przez IDE. Jest mały i niezależny (w przeciwieństwie do większego refaktoryzacji), jest dostępny we wszystkich wersjach i dotyczy wszystkich programistów (w przeciwieństwie do niektórych z bardzo imponujących funkcji wizualizacji architektonicznej, które są dostępne tylko w Ultimate i nie mają zastosowania do znacznej części potencjalnych użytkowników VS, którzy nigdy nie będą mieli tak dużych projektów) i chociaż jest to bardzo proste (dosłownie robi dokładnie to samo,
csc.exe
co robi od tego czasuvar
został wprowadzony), z pewnością wygląda imponująco, szczególnie dla kogoś, kto tak naprawdę nie rozumie niejawnego pisania i wnioskowania o typie (lub który próbuje google „wnioskowania o typie” i zostaje przytłoczony takimi terminami jak Hindley-Milner, unifikacja, cofanie, gdy w rzeczywistości Wnioskowanie tylko lokalnie dla C♯ jest niezwykle proste i jednoznaczne).Krótko mówiąc: to efektowny sposób pokazania funkcji IDE.
źródło