Держите общие и локальные имена короткими, а редкие и нелокальные — длиннее
Причина
Читаемость. Снижение вероятности конфликтов между несвязанными нелокальными именами.
Пример
Традиционно короткие локальные имена повышают читаемость:
template<typename T> // хорошо
void print(ostream& os, const vector<T>& v)
{
for (gsl::index i = 0; i < v.size(); ++i)
os << v[i] << '\n';
}
Индекс принято называть i, а в этой обобщённой функции нет подсказки о смысле вектора, поэтому v подходит так же хорошо, как любое другое имя. Сравните с:
template<typename Element_type> // плохо: многословно, сложно читать
void print(ostream& target_stream, const vector<Element_type>& current_vector)
{
for (gsl::index current_element_index = 0;
current_element_index < current_vector.size();
++current_element_index
)
target_stream << current_vector[current_element_index] << '\n';
}
Да, это карикатура, но мы видели и хуже.
Пример
Нетрадиционные и короткие нелокальные имена делают код непрозрачным:
void use1(const string& s)
{
// ...
tt(s); // плохо: что такое tt()?
// ...
}
Лучше: дайте нелокальным сущностям читаемые имена:
void use1(const string& s)
{
// ...
trim_tail(s); // лучше
// ...
}
Здесь есть шанс, что читатель знает значение trim_tail и сможет вспомнить его после поиска.
Пример (плохой)
Имена аргументов больших функций де-факто нелокальны и должны быть значимыми:
void complicated_algorithm(vector<Record>& vr, const vector<int>& vi, map<string, int>& out)
// читать из событий в vr (помечая использованные Record) для индексов из
// vi и помещать пары (имя, индекс) в out
{
// ... 500 строк кода, использующих vr, vi и out ...
}
Мы рекомендуем держать функции короткими, но это правило соблюдается не всегда, и именование должно это отражать.
Контроль
Проверяйте длину локальных и нелокальных имён. Учитывайте также длину функции.