Что такое Visual Studio.NET snippets? Часть 1

Источник: habrahabr

Я решил разбить статью на две части: вступительную часть и часть реализации. Основная причина в размере текста, который включает форматированный текст примеров. С меньшими объемами текста работать легче, да и читать такой текст удобнее. Кто знаком со сниппетами может сразу переходить ко второй части статьи, где рассказывается как сделать свой сниппет и использовать его в студии.

Что такое snippet"ы в Visual Studio.NET? Как показал опрос, более трети голосовавших не знают что это. Вполне возможно, впрочем, что они никогда не работали в этой среде и никогда не будут этого делать. Эта статья для тех двадцати процентов, кто заинтересовался и для всех остальных, кто хочет узнать, что такое snippet, как его создать и использовать.

На самом деле все просто: snippet - это механизм, позволяющий быстро добавить в код какой-то шаблонный текст, например определение свойства, выделение региона, определение класса. Но в отличие от примитивного шортката, который бы просто втыкал текстовую заготовку snippet позволяет определять код удобнее. Snippet имеет возможность определить однотипные поля в тексте, которые заполнятся указанным значением по завершении вставки snippet"а (далее "сниппета"). Приведу пример:


    [global::System.Serializable]
    public class MyException : Exception
    {
      public MyException() { }
      public MyException(string message) : base(message) { }
      public MyException(string message, Exception inner) : base(message, inner) { }
      protected MyException(
       System.Runtime.Serialization.SerializationInfo info,
       System.Runtime.Serialization.StreamingContext context)
        : base(info, context) { }
    }

Здесь приведен пример стандартного snippet'a "exception", который добавляет в код шаблон для определения класса пользовательского исключения. На примере выделены зеленым цветом области редактируемого текста, переход между ними происходит по нажатию tab. При изменении каждой из них, изменятся соответствующие значения текста в зависимых местах. К примеру, назови мы класс NewException и все конструкторы моментально переименуются. Кроме того, в некоторых случаях сниппет автоматически добавляет в код логику подходящую по смыслу. Например, сниппет для switch и при указании в поле ввода экземпляра типа enum автоматически сформирует case для каждого элемента enum и добавит default:


public enum USER_TYPE { UNKNOWN = 0, REGISTERED, NCF_CLERK, CLERK };
...
      switch (p_uType)
      {
        case CommonUtil.USER_TYPE.UNKNOWN:
          break;
        case CommonUtil.USER_TYPE.REGISTERED:
          break;
        case CommonUtil.USER_TYPE.NCF_CLERK:
          break;
        case CommonUtil.USER_TYPE.CLERK:
          break;
        default:
          break;
      }

Как работать со сниппетами? Для этого есть два пути: набрать известное имя сниппета и нажать tab или же нажать шорткат ctrl+k+x для вывода списка всех зарегистрированных сниппетов. Первый вариант удобнее: можно набрать, к примеру "prop", нажать tab и мгновенно получить шаблонное определение свойства класса.
Вполне естественно, что такой механизм чрезвычайно полезен. Он экономит время, позволяя определять заранее отформатированный код с возможностью удобной кастомизации. Возможно, это никак не повлияет на работу вашей программы, но добавит вам некоторую порцию удовольствия от процесса кодирования. Еще больше пользы можно получить делая свои сниппеты. Об этом во второй части статьи.

PS: "в статье нет ошибок!" - к сожалению утверждать этого невозможно, но я буду рад, если вы обратите мое внимание на найденную вами ошибку.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=23833