Статьи

Кейс для комментариев к коду: на стороне сервера

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

С одной стороны, некоторые считают, что код должен самодокументироваться. То есть это должно быть написано достаточно ясно, чтобы не нуждаться в комментариях.

С другой стороны, некоторые считают, что все должно быть прокомментировано. То есть должны быть комментарии для каждого класса, каждой функции, каждого блока и каждой строки.

Тогда, конечно, есть те, кто посередине. На самом деле, некоторые разработчики комментируют только те области своего кода, которые могут сбивать с толку, а не использовать подход «все или ничего», описанный выше.

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

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


Прежде чем рассматривать различные части, составляющие проект WordPress, я думаю, что важно обсудить, почему комментарии кода имеют значение. Конечно, большинство из нас знает, что это должно дать краткое объяснение того, что происходит с кодом, но последствия более значительны.

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

В конце концов, если бы это было легко понять, это бы не называлось кодом (и нам не нужны были бы комментарии).

Я не верю, что мы должны писать комментарии к коду только с учетом других. Я думаю, что мы должны написать их для себя точно так же. Когда вы впервые обращаетесь к коду после того, как прошло значительное количество времени, скорее всего, вы стали лучшим программистом, освоили несколько новых методов и / или перешли от того, как вы писали код. Таким образом, может быть трудно понять, что вы пытались сделать.

И если автору кода трудно следовать, есть ли надежда для других разработчиков, которые вносят, расширяют или улучшают код?

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

С учетом сказанного я хотел бы рассказать о нескольких причинах и стратегиях комментирования всех файлов, которые используются при создании темы, плагина или приложения WordPress.


В зависимости от вашего проекта, файлы, которые вы должны включить, могут отличаться. Для целей этой статьи я предполагаю, что вы включаете файлы PHP, HTML-файлы, таблицы стилей и файлы JavaScript просто для того, чтобы обеспечить охват всех баз. В этой статье мы обсудим язык на стороне сервера, то есть PHP, а в следующей статье рассмотрим языки на стороне клиента.

Когда дело доходит до комментирования наших файлов PHP, есть несколько требований, которым мы должны следовать:

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

Когда дело доходит до комментирования кода в PHP, на самом деле есть предложенный способ сделать это — PHPDoc . Подобно стандартам кодирования WordPress, PHPDoc является стандартом для комментирования (или документирования) кода PHP. Он предоставляет ряд соглашений, все из которых применимы к WordPress, но подмножество, которое я вижу, используется регулярно.

WordPress поддерживает два типа файлов шаблонов:

  1. Базовые файлы шаблонов тем, такие как индекс, одиночный, страницы, шаблоны архивов и так далее.
  2. Пользовательские шаблоны страниц — это файлы, которые мы разработчики создаем и которые можно применять к существующим страницам в пользовательском интерфейсе WordPress.
  3. Частичные шаблоны, представляющие собой фрагменты шаблонов, которые можно использовать в других шаблонах.

Когда дело доходит до документирования файлов шаблона — независимо от того, какой тип шаблона — я всегда стараюсь предоставить информацию заголовка, которая определяет имя файла, назначение файла, пакет — тему или плагин — частью которого он является, и как долго это существовало в проекте.

Например:

1
2
3
4
5
6
7
8
/**
* Template Name: Featured Projects
*
* The template used for the ‘Featured Projects’ area of the homepage.
*
* @package Project Theme
* @since 1.0
*/

Как видите, я предоставил требуемое Template Name для файла, но я также дал краткое описание того, что происходит внутри файла. Я также использовал директивы @package и @since чтобы @package @since .

Директива @package , по крайней мере, в контексте WordPress, представляет название темы или плагина, частью которого является данный файл.

Директива @since как долго шаблон существовал в проекте. В приведенном выше случае, очевидно, что он был в проекте с момента его первоначального выпуска, но это не редкость, когда файлы добавляются в качестве темы или зрелого плагина, в результате чего в качестве этого значения появляется другой номер версии.

Из-за природы базовых файлов шаблонов, таких как индекс, одиночный шаблон, страница, шаблоны архивов и т. Д., Нет необходимости определять « Template Name », но описание, пакет и директивы по-прежнему актуальны.

Функции документирования очень похожи на шаблоны документирования. Хотя они не требуют определенного тега, такого как « Template Name », они все равно должны содержать описание назначения функции и директивы @since .

Есть также две дополнительные директивы, которые функция может включать:

  • @param который описывает тип и описание параметра, который принимает функция
  • @return который описывает тип и описание того, что возвращает функция

Конечно, функции не всегда принимают параметры, а функции не всегда возвращают значения, поэтому эти две директивы необязательны.

Предполагая, что у вас есть функция, которая поддерживает обе вышеуказанные директивы, вот как вы должны ожидать появления документации:

1
2
3
4
5
6
7
8
/**
 * Programmatically inserts a page into the database.
 *
 * @param $title The title of the page.
 * @param $template_name The name of the template file located in the ‘templates’ directory.
 * @return The ID of the page that was created
 * @since 1.0
 */

Для получения дополнительной информации о каждой из этих директив вы можете просмотреть теги PHPDoc ; тем не менее, вы можете увидеть, насколько это может быть полезно для работы над темой или плагином — это избавляет от необходимости различать то, что вы или другой разработчик пытались выполнить с помощью данной функции.

Хотя существует немного рекомендаций или фактических стандартов для документирования блоков кода, я все еще считаю, что это полезно, особенно когда речь идет о более сложных циклах или условных выражениях.

Все это может быть продемонстрировано в следующем примере. Предположим, что нам нужно настроить пользовательский запрос для циклического прохождения метаданных поста, а затем удалить его, если найден определенный ключ и / или значение. Это потребует следующих шагов:

  1. Настройка аргументов для запроса
  2. Выполнение запроса
  3. Перебирая результаты
  4. Условное удаление метаданных поста
  5. Сброс запроса

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Setup arguments to retrieve all published posts
$arguments = array (
    ‘post_type’ => ‘post’,
    ‘post_status’ => ‘publish’,
    ‘numberposts’ => -1
);
 
// Instantiate the query
$posts_query = new WP_Query( $arguments );
 
// If any posts are found, loop through them
if( $posts_query->have_posts() ) {
 
    while( $posts_query->have_posts() ) {
 
        $posts_query->the_post();
 
        /*
         * For each piece of post meta that is found, store its values in
         * the $meta_key and $meta_value for us to check.
         */
        foreach( get_post_meta( get_the_ID() ) as $meta_key => $meta_value ) {
 
            /*
             * There may be multiple meta keys (such as tweet_url_0, tweet_url_1)
             * so we need to check to see if the ‘tweet_url’ is located in the
             * $meta_key.
             *
             * If so, we can delete the post meta data
             */
            if ( false != strstr( $meta_key, ‘tweet_url’ ) ) {
                delete_post_meta( get_the_ID(), $meta_key );
            } // end if
 
        } // end foreach
 
    } // end while
 
} // end if
 
// Reset the custom query so not to interfere with any other queries or The Loop
wp_reset_postdata();

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

Ключевой момент, который я пытаюсь сделать с помощью приведенного выше кода, заключается в том, что если мы документируем отдельные строки, то лучше придерживаться однострочного соглашения, то есть // но если мы пишем комментарий который охватывает несколько строк, всегда лучше использовать многострочный комментарий, то есть /* */ .

Обратите внимание, что не каждая строка должна быть закомментирована. Скорее, блоки (или куски) кода могут быть объяснены в многострочном комментарии, который документирует, что должно произойти, в следующем исходном коде.

Конечно, это не стандартный или предпочтительный способ сделать что-то. Это просто стратегия, которую я видел используемой, которую я ценю, и которую я использую сам.


phpDocumenter

Если вы в конечном итоге будете следовать соглашениям, изложенным в PHPDoc, то есть ряд утилит, которые могут генерировать страницы документации для вашей работы. Возможно, самым популярным инструментом является phpDocumentor .

Короче говоря, phpDocumentor — это утилита, которая просматривает ваш исходный код в поисках правильно отформатированных комментариев кода PHPDoc (в частности, для классов и функций), а затем генерирует набор стилизованных страниц, собирающих информацию в ваших комментариях.

Это делает доставку ориентированной на разработчика документации с вашим приложением проще простого.


В этой статье я рассмотрел, почему я считаю, что комментарии к коду должны быть тем, что все разработчики должны включать в свой код. Хотя Кодекс WordPress определяет базовый набор комментариев, необходимых для нашей работы и / или для взаимодействия с приложением WordPress, очевидно, что мы можем проделать еще больше работы, чтобы улучшить ясность нашего кода.

Дело в том, что мы рассмотрели только половину этого. Итак, в следующей статье мы рассмотрим документирование разметки, JavaScript и стилей.