Idiomatic D. Вложенные комментарии и version(none) [перевод]

В этот раз, мы решили возобновить публикацию переводов и объектом нашего перевода станет вот этот ресурс, на котором опубликованы интересные идиоматические (т.е. простые и понятные, часто используемые профессионалами приемы программирования, выраженные через конструкции языка). Переводы будут даваться порциями по одной или более идиоме за раз (в зависимости от их объема) и сегодня вас ждет небольшая порция хорошего кода на D.

В дополнения к однострочным // и многострочным (блокам) комментариям /* */, D поддерживает вложенные блоки комментариев, которые создаются с использованием /+ +/

/+
    Весь этот блок закомментирован.

    /**
     * Документированная функция
     */
    void doStuff()
    {
        // бла бла бла
    }

    /+
      Такие комментарии могут быть вложенными.
    +/
+/

Такие блоки очень удобны для комментирования больших кусков кода и являются некоторым эквивалентам выражениям #if 0 / #endif из C/C++.

Если вы предпочитаете оставить часть закоментированного кода в силе, то предпочтете использовать version(none).

version(none)
{
    // Тут тоже весь блок закомментирован, но он все же парсится.

    /**
     * Документированная функция
     */
    void doStuff()
    {
        // бла бла бла
    }
}

В действительности, идентификатор none является специальным идентификатором версии, который не может быть установлен:

version = none; // Ошибка: идентификатор версии "none" не зарезервирован и она не может быть установлена

Примечания от авторов блога :

  • В D есть различные комментарии, а не только те, которые были использованы в примерах. В частности, разные виды комментариев по разному понимаются встроенным в компилятор генератором документации ddoc, что позволяет использовать их как своеобразный язык разметки.
  • Блок version(none) позволяет отключать блоки кода, фактически не позволяя компилироваться тем блокам которые заключены в такую конструкцию. Честно говоря, мы пока не вполне себе представляем, как это использовать, но думается, что это может быть использовано для сохранения некоторого старого кода, ну и как своеобразная документация.

 

 

Добавить комментарий