Це, напевно, єдине правило форматування коду, яке я знайшов, фактично, помітно впливає на читабельність, і це майже не вимагає зусиль (якщо припустити, що ваш редактор коду не починає з вами бій за це).
Добре розробити мову програмування, щоб імена відображалися в послідовному положенні в деклараціях / визначеннях. Обґрунтування зрозуміло: у вас є приємний візуальний якір (фігурна дужка або просто висячий відступ), який ви можете використати, щоб негайно знайти початок назви. Вам не потрібно насправді розбирати мову під час сканування через файл, знайти ім'я.
Це те саме, що при форматуванні документа: коли ви запускаєте новий розділ, ви ставите ім'я в передній частині жирним шрифтом - часто на його власному рядку - не кудись закопаним, недиференційованим, у довгому реченні.
Ранній C мав дуже стислі підписи: типи повернення були необов’язковими, а типи аргументів оголошувались після підпису. Імена також були дуже короткими. Це зменшило вплив випадкового повернення типу, що компенсує ім'я.
double dot(x, y);
Досі досить засвоюється.
C ++ зробило це трохи гірше. Він перемістив специфікації типу аргументів у підписи, зробивши підписи довшими. Цей синтаксис пізніше був прийнятий під час стандартизації С.
static struct origin *find_origin(struct scoreboard *sb,
struct commit *parent,
struct origin *origin)
менш засвоюваний, але не надто поганий. (Уривок з Git)
Тепер розглянемо сучасну практику програмування з довгими описовими іменами та параметризованими типами та подивимось, як цей вибір став катастрофічним. Приклад із заголовка Boost:
template <class A1, class A2, class A3, class A4, class A5, class A6>
inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&)
{
typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type result_type;
return result_type();
}
Якщо ви пишете загальний код, подібні підписи навіть не є звичайними. Ви можете знайти приклади набагато гірших випадків, ніж це, не надто намагаючись.
Зрозуміло, що C, C ++ та їх похідні, Java та C #, є винятками із наявності читаних декларацій / визначень. Їх популярні попередники та однолітки (Fortran, ALGOL, Pascal) розміщували імена перед типами результатів, і, на щастя, багато хто з їхніх наступників (Go, Scala, TypeScript і Swift для того, щоб назвати декілька) також вибрали більш читаються синтаксиси.