суббота, 2 октября 2010 г.

Эффективное написание кода в Visual Studio 2010

Сколько бы ни говорили о том, что главное – продумать код, а не написать его, когда приходит время его написать, хочется сделать это быстро, красиво и без ошибок.

Это первая статья из серии "написание кода в Visual Studio", по мотивам моего скринкаста на TechDays.

Кодирование без сторонних приложений

Как вы все уже знаете, недавно состоялся релиз Visual Studio 2010. Однако средства для эффективного написания кода были и в ранних редакциях. В новой версии заметен реверанс в сторону TDD, в частности – улучшение генерации заглушек и новый режим Intellisense. Также улучшена навигация по коду. Набор рефакторингов, к сожалению, остался тем же.

Далее приведен список возможностей для улучшения или ускорения написания кода в порядке уменьшения полезности (на мой взгляд, разумеется). Не забываем, что в этой статье не будут рассматриваться сторонние приложения – о них напишу в блоге позже.

Intellisense

На первом месте Intellisense отнюдь не потому, что есть нечто кардинально новое, а потому что без него писать код, пользующийся многими библиотеками, слишком уж сложно.


В Visual Studio 2010 помимо режима Completion добавлен режим Suggestion. В этом режиме элемент в списке не выбирается по умолчанию. То есть, после набора нескольких символов, можно нажать пробел и не появится первый, подходящий по префиксу элемент (иногда ненужный), а останутся только набранные символы. Соответственно, когда это новый, еще не существующий, класс, можно будет потом сгенерировать для него заглушку, но об этом далее. Также появился поиск по Camel case. То есть, если набрать “SB”, получим такие варианты:
Intellisense

Быстрый поиск и подсветка

Теперь, когда в редакторе выбран идентификатор, через секунду-другую в открытом файле подсвечиваются все места, где он используется. При этом можно перемещаться между ними с помощью Ctrl+Shift+Up/Down Arrows. Довольно удобно, особенно, когда этот идентификатор (например, поле класса) используется в нескольких местах, которые не слишком близко расположены.
Подсветка кода
Также появился сквозной поиск по именам файлов, типов, методов или свойств (я его называю «поиск по всему»). Для того чтобы им воспользоваться, необходимо нажать Ctrl+, и в появившемся диалоге набрать часть слова. Ниже появятся все соответствующие названия (сначала те, которые начинаются с введенной части).  При этом поиск Camel case тоже работает (набрав TM, получили бы только TicketManager).
Поиск по коду в Visual Studio 2010
Помимо этого, не стоит забывать про старые, но достаточно мощные возможности обычного поиска (того, что в меню Edit / Find and Replace). В частности, есть поиск и замена с использованием регулярных выражений.

Набор рефакторингов

Давайте теперь поговорим о новых рефакторингах в новой студии. Сколько их появилось? Правильно – ровно ноль! Лично мне не совсем понятна эта позиция. То ли в Microsoft считают, что рефакторинг большинству разработчиков не нужен, то ли решили поддержать сторонних производителей инструментов для рефакторинга.
Так или иначе, вот список, не изменившийся с выхода Visual Studio 2008:
  • Rename
  • Extract Method
  • Encapsulate Field
  • Extract Interface
  • Remove Parameters
  • Reorder Parameters
Из базовых рефакторингов лично мне крайне не хватает Introduce (Variable, Parameter, Field). Не говоря уже о таких возможностях, как, например, удобная генерация конструкторов с параметрами, выбранными на основе полей класса. Хотя, строго говоря, это уже не совсем классический рефакторинг.

Навигация по вызовам

Как и прежде присутствует Go To Definition (с переходом на «исходный код» для методов из системных библиотек), Find All References. Из нововведений – View Call Hierarchy.
Навигация по коду
Иерархия вызовов выглядит знакомо для тех, кто пользовался Reflector. Не очень часто требуется, зато достаточно удобно. Можно посмотреть на тех, кто вызывает метод и кого вызывает метод (естественно, в виде дерева, которое можно разворачивать дальше).
Иерархия вызовов в Visual Studio 2010
На этом пока закончу, продолжение допишу на днях, там речь пойдет о сниппетах, генерации заглушек и нескольких мелких доработках.
Как промежуточный итог можно сказать, что навигации по коду в студии стала еще удобнее.

[UPDATE]
Продолжение: http://www.olegaxenow.com/2010/10/visual-studio-2010-snippety-zaglushki-i.html

14 комментариев:

  1. Когда я только начал работать разработчиком профессионально, меня поразило как быстро старшие коллеги писали код. Причем это не просто высокая скорость набора текста. Это знание горячих клавиш. Это ReSharper и опять же его горячие клавиши. Но это еще и базовые комбинации: "Ctrl+LeftArrow", "Ctrl+RightArrow", "Shift+Delete", "Home", "End", "Ctrl+Home/End". Это очень ускоряет. И поменьше мыши :)

    ОтветитьУдалить
  2. > Это знание горячих клавиш. Это ReSharper и опять же его горячие клавиши.

    Абсолютно согласен, про решарпер обязательно напишу позже (постараюсь в этом месяце).

    > Но это еще и базовые комбинации: "Ctrl+LeftArrow", "Ctrl+RightArrow", "Shift+Delete", "Home", "End", "Ctrl+Home/End".

    А про это в следующем посте в ближайшее время.

    ОтветитьУдалить
  3. ReSharper стоить денег, поэтому нафиг не кому не нужен

    ОтветитьУдалить
  4. > ReSharper стоить денег, поэтому нафиг не кому не нужен

    Многое из того, что делает жизнь лучше или работу продуктивнее в этом мире стоит денег... Вопрос приоритетов :)

    ОтветитьУдалить
  5. Не правда, многое из того что действительно делает работу продуктивнее можно найти бесплатно

    ОтветитьУдалить
  6. > Не правда, многое из того что действительно делает работу продуктивнее можно найти бесплатно

    С этим я и не спорю, наши два утверждения не исключают друг друга, если присмотреться :)

    P.S. Если напишете про бесплатный аналог решарпера (по полноте функционала) - я с удовольствием сделаю ссылку в своем посте про решарпер.

    ОтветитьУдалить
  7. Честно говоря я не знаю что такое эдакое делает решарпер для быстрого набора текста как утверждали выше, но точно знаю что платить за это - дурасть. Чтобы быстро набирать текст нужно помнить сокращения, например webr.c. создаст WebRequest.Create... ну и так далее. А есть еще снипеты. Просто у нас национальная особеность, захавать побольше и без разбору. Вот и появляются экземпляры, которые воруют Ultimate на торрентах и всем потом об их якобы преимуществах рассказывают в блогах. А если подумать, то для набора текста достаточно и встроенных средств Express версии.

    ОтветитьУдалить
  8. Кстати, все о чем вы в статье пишите, есть в Express версии. Ну может быть за исключением никому не нужной вювкалхиерархи и поиск по файлам солюшина выглядит немного иначе.

    ОтветитьУдалить
  9. @Анонимный: как-то вы слишком негативно отноститесь к решарперу. Посмотрите хотя бы на его возможности по рефакторингу и кодогенерации - их в несколько раз больше чем в голой студии и на каждую своя комбинация клавиш. Анализатор кода и подсветка синтаксиса дают эффект, даже если не знать хоткеев.

    По поводу бесплатных аналогов - CodeRush + community plugins. Но лично мне он показался тяжеловат и неповоротлив.

    ОтветитьУдалить
  10. > Честно говоря я не знаю что такое эдакое делает решарпер для быстрого набора текста как утверждали выше, но точно знаю что платить за это - дурасть.

    Из самых простых примеров - генерация конструктора с параметрами, соответствующими полям, Smart Completion (Ctrl+Shift+Space), подсказки по замене кода. Из того, что посложнее - Pattern Catalog.

    >А если подумать, то для набора текста достаточно и встроенных средств Express версии.

    Для набора *текста*, достаточно любого нормального текстового редактора. Для набора *исходного кода* я лично использую, в том числе, ReSharper. У него есть свои недостатки - основной и почти единственный - тормоза в студии. Но преимущества лично для меня перевешивают недостатки.

    P.S. На случай, если "воруют Ultimate" это ко мне - у меня студия вполне лицензионная, как и ReSharper.
    P.P.S. Подождите немного - буду писать про ReSharper - там ваши комментарии будут более к месту :)

    ОтветитьУдалить
  11. Есть еще такая замечательная вещь как Vim
    Правда я толко начал осваивать, моск выносит конкретно. Но чувствую, что если научусь там работать, то скорость набора возрастет многократно

    ОтветитьУдалить
  12. To @PFight
    FYI: http://stackoverflow.com/questions/319965/vim-as-visual-studio-ide

    ОтветитьУдалить
  13. Такое чувство, будто решарпер со студией замещает людям мозг.

    Мне обычного SharpDevelop за глаза и за уши...
    Ну или студии Express. Хотя последний и не может присоединяться к существующем процессу для отладки.

    Помню, как радостно пользовался решарпером. Рефакторил. Ощищал код.

    Потом снёс (из-за глюков студии) и перестал пользоваться средствами рефакторинга.

    В итоге стал тщательнее продумывать то, что пишу.

    Гляжу на код некоторых коллег, которые работают с решарпером - код говно. Не помогает решарпер.

    Так зачем же он тогда нужен? Смысл писать говно с надеждой на то, что решарпер всё поправит? К тому же, решарпер почти ничего поправить не может...

    ОтветитьУдалить
  14. @Анонимный: А вот моя история. Использую студию и решарпер больше 7 или 8 лет. Бывает, глючит пару раз в год. При этом решарпер ускоряет написание кода (не рефакторинг), навскидку, раза в два. Так что я готов мириться с небольшими тормозами и редкими глюками.

    Что касается того, что кому-то решарпер "не помогает" - а что им поможет?

    Можно писать хороший код и пользоваться решарпером, для того чтобы писать его быстрее и делать еще более качественным.

    P.S. Кстати, в SharpDevelop для этого наверняка есть свои средства, просто, IMHO, по набору функционала они вряд ли на уровне.

    ОтветитьУдалить