Подтвердить что ты не робот

Должны ли декларации функций включать имена параметров?

Что бы вы на самом деле считали лучшим стилем кодирования: объявляли имена параметров функций/методов внутри заголовка или только в исходном файле, так как можно обойтись? Если вы действительно рассматриваете объявление имен параметров функций/методов только в исходном файле, как бы вы объявили значения по умолчанию?

Внешний заголовок:

//One.hpp
#ifndef ONE_HPP
#define ONE_HPP
namespace eins {

/** \brief description
 *  
 * \param one represents ....
 * \param two represents ....
 */
void function(int,int);

}
#endif

// One.cpp
#include "One.hpp"

eins::function(int one,int two) {
  //Do stuff//
}

Внутренний заголовок:

//One.hpp
#ifndef ONE_HPP
#define ONE_HPP
namespace eins {

/** \brief description
 *  
 * \param one represents ....
 * \param two represents ....
 */
void function(int one,int two);

}
#endif

// One.cpp
#include "One.hpp"

eins::function(int one,int two) {
  //Do stuff//
}

Моя личная точка зрения заключается в том, что первый способ лучше, поскольку пользователь фактически вынужден читать комментарии /API и не может ошибаться, чтобы просто прочитать имена параметров. Но я не уверен в этом и фактически объявляю, что значения по умолчанию будут нарушать мой стиль, как вы должны сделать это в объявлении заголовка функции/метода.

4b9b3361

Ответ 1

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

Большинство систем документации (скажем, doxygen) будут анализировать ваши файлы заголовков и генерировать документы. Например, посмотрите здесь http://libface.sourceforge.net/doc/html/classlibface_1_1_face.html

Посмотрите на документацию конструктора.

Сравните это

Parameters:
    x1  X coordinate of the top left corner of the face.
    y1  Y coordinate of the top left corner of the face.
    x2  X coordinate of the bottom right corner of the face.
    y2  Y coordinate of the bottom right corner of the face.
    id  ID of the face. -1 not not known.
    face    A pointer to the IplImage with the image data. 

и этот

Parameters:
    param1  X coordinate of the top left corner of the face.
    param2  Y coordinate of the top left corner of the face.
    param3  X coordinate of the bottom right corner of the face.
    param4  Y coordinate of the bottom right corner of the face.
    param5  ID of the face. -1 not not known.
    param6  A pointer to the IplImage with the image data. 

Вы понимаете.:)

Ответ 2

Включить имена параметров в объявления.

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

Ответ 3

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

В худшем случае это немного лишний набор текста от имени программиста. Он показывает намерение, в дополнение к любым комментариям, которые были предоставлены. Я никогда не был одним из тех, кто защищал практику, которая, судя по всему, существует исключительно для сохранения набора текста. В эти дни автоматических полных iDEs никогда не было проще быть подробным.

Ответ 4

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

void save(const std::string&);

что он делает? Сохраняет ли эта строка? Или он сохраняет путь к файлу, представленный строкой? Или...?

Итак, вы можете сделать:

void save(const std::string& filepath);

чтобы уточнить. Но это только уточняется, когда кто-то смотрит на заголовок. Если вы это сделаете:

void saveToFilepath(const std::string&);

это должно быть совершенно ясно везде. Конечно, поскольку вы добавляете больше параметров, это становится более громоздким (но это еще одна причина, чтобы не добавлять слишком много параметров, см. В этом коде Боба Мартина, он одобряет новальные и унарные функции, сомневается в бинарных функциях, весьма сдержанно о триниальные функции и не желая ничего больше).

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

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

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