Чи відмовляє Microsoft у використанні "var" у C #? (VS2017)


16

Я дивлюся на майбутню Visual Studio 2017 .

У розділі під назвою « Підвищена продуктивність» є зображення Visual Studio, що використовується для заміни всіх подій var на явний тип.

підвищила продуктивність VS2017

У коді, мабуть, є кілька проблем, які Visual Studio визначив як «потребує виправлення».

Я хотів ще раз перевірити своє розуміння використання var у C #, тому я прочитав статтю Еріка Ліпперта від 2011 року під назвою Використання та зловживання неявним набором тексту .

Ерік каже:

  • Використовуйте var, коли потрібно; коли ви використовуєте анонімні типи.
  • Використовуйте var, коли тип декларації очевидний від ініціалізатора, особливо якщо це створення об'єкта. Це виключає надмірність.
  • Подумайте про використання var, якщо код підкреслює смислову "ділову мету" змінної та занижує "механічні" деталі її зберігання.
  • Використовуйте явні типи, якщо це потрібно для правильного розуміння та підтримки коду.
  • Використовуйте описові назви змінних незалежно від того, використовуєте ви "var". Імена змінних повинні представляти семантику змінної, а не деталі її зберігання; "DecimalRate" поганий; "Процентна ставка" - це добре.

Я думаю , що велика частина вару використання в коді, ймовірно , добре. Я думаю, було б нормально не використовувати var для біта, який читається ...

var tweetReady = workouts [ ... ]

... тому що, можливо, це не на 100% негайно, що це за тип, але навіть тоді я досить швидко знаю, що це boolean.

Використання вар для цієї частини ...

var listOfTweets = new List<string>();

... мені виглядає точно як добре використання var, тому що я думаю, що зайве робити наступне:

List<string> listOfTweets = new List<string>();

Хоча виходячи з того, що Ерік каже, змінна, ймовірно, має твіти, а не listOfTweets .

Що було б причиною зміни всього varвикористання тут? Чи щось не так з цим кодом, який я пропускаю?


Код на скріншоті - це саме те, що ви погоджуєтесь, не слід використовувати var ... Пояснення?
Теластин

1
Я думаю, що varтут все корисне. Ви можете, можливо, змінити його, але навіть тоді я думаю, що це насправді не потрібно. Навіщо змінювати їх на явний тип?
Роуан Фрімен

2
Майте на увазі, що те, що очевидно для людей, не завжди очевидно для візуальної студії.
candied_orange

Усі? У вас є одна помилка на скріншоті, яка, очевидно, пов'язана з вар.
Теластин

Ну, це не помилка як така, а скоріше попередження про те, на яке ви очікуєте відмітки лінійки. Відповідно до зображення, усі varsвони були позначені однаково; з однаковим попереджувальним хрестиком біля них та червоним підкресленням. Імовірно, Visual Studio хоче їх виправити однаково. Якщо я не помиляюся.
Роуан Фрімен

Відповіді:


27

TL; DR: ні, Microsoft не перешкоджає використанню 'var' у C #. Образу просто не вистачає контексту, щоб пояснити, чому він скаржиться.

Якщо встановити VS2017 RC і відкрийте панель Параметри і перейдіть Text Editor -> C#, ви побачите новий розділ: Code Style. Це схоже на те, що пропонував ReSharper на деякий час: набір настроюваних правил для стилів кодування.

Він включає три варіанти навколо використання var: для типів вбудовування, коли тип змінної є очевидним та "В іншому місці". У кожному конкретному випадку можна вказати "віддати перевагу явному типу" або "віддати перевагу вару" та встановити рівень сповіщення "жоден", "пропозиція", "попередження" або "помилка":

введіть тут опис зображення


3
Що за замовчуванням? Якщо "заводська установка" - "Віддайте перевагу явному типу", то, можна стверджувати, MS не відштовхує від використання var.
ЖакБ

@JacquesB, параметри за замовчуванням показані на знімку екрана. Оскільки всі встановлені на "None", важко дізнатися, чи "Prefer eksplicit type" активно встановлюється як бажаний спосіб MS, чи це лише "нульове значення". Наскільки я переживаю, найкращі благодійники всі прихильні var, тому мені не дуже важливо, які погляди МС щодо цього питання.
Девід Арно

6

Я думаю, ти занадто багато читаєш у цьому. Отже, є функція, яка дозволяє замінити звичаї неявного введення тексту на явні анотації типу, і ви робите висновок про те, що неявна введення тексту не перешкоджає. Існує також можливість компілювати C♯ в байт-код CIL, ви б з цього зробили висновок, що C♯ не рекомендується, і ми повинні замість цього написати байтовий код CIL? Напевно, ні.

Microsoft просто демонструє глибоке розуміння IDE вашого коду. Він може навіть записати свої типи для вас, не потребуючи їх написання. Це воно.

Це просто хороший приклад демонстрації можливостей розуміння коду IDE. Він невеликий і самостійний (на відміну від показника більшого рефакторингу), він доступний у всіх виданнях і застосовний до всіх розробників (на відміну від деяких, безумовно, вражаючих особливостей архітектурної візуалізації, які доступні лише в Ultimate і не застосовуються до значної частини потенційних користувачів VS, які ніколи не матимуть таких великих проектів), і хоча це дуже просто (це буквально робить саме те, що робиться csc.exeз тих пірvarбуло запроваджено), це, безумовно, виглядає вражаюче, особливо для того, хто насправді не розуміє неявного введення тексту та виводу (або хто намагається в Google "вивести тип" і переповнюється такими термінами, як Хіндлі-Мілнер, об'єднання, зворотний трек, насправді Локальний висновок C♯ надзвичайно простий і простий).

Отже, коротше: це кричущий спосіб демонструвати функцію IDE.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.