Почему не оба?
Прежде всего, «описательный» и «многословный» не одно и то же. Например, если вы пишете довольно локальный цикл, i
это очень хорошее имя переменной для переменной цикла; current_iteration_index
хотя, возможно, более описательный и определенно более многословный, он намного хуже и вообще не добавляет никакой информации, потому что использование i
в качестве переменной цикла является общепринятым, и другого смысла в i
этом нет.
Хорошие имена переменных носят описательный характер, так как программист, знакомый с идиомой языка и соглашениями кодовой базы, может легко догадаться, какова их роль, но они также достаточно кратки, чтобы сохранять компактность.
Ограничение в 80 символов, хотя первоначально оно было следствием технических ограничений текстовых терминалов 1970-х годов, по-прежнему ценится многими сегодня, и хотя есть все еще технические причины (максимальная длина строки в некоторых сетевых протоколах, в особенности связанных с электронной почтой), более веские причины - психологические и социальные. Оказывается, что длина строки около 66-символьной метки обеспечивает удобство чтения для проза на естественном языке (интересный размер шрифта не имеет большого значения, и, следовательно, размер экрана или бумаги); Пределы строки в 80 символов довольно близки к этому, но, поскольку основная часть типичного фрагмента кода обычно имеет отступ не менее одного или двух уровней (что означает от 4 до 16 символов в зависимости от настроек отступа),
Другой эффект привязки к 80-символьным строкам заключается в том, что это довольно хороший показатель того, что все слишком сложно. Такие длинные строки обычно вызваны одним из следующих:
- Функции с длинным списком аргументов; это нехорошо, потому что они ухудшают читабельность и могут легко вызывать незначительные ошибки, например, когда люди меняют порядок аргументов так, что компилятор не улавливает их.
- Сложные выражения, часто встречающиеся в условных выражениях (например
if ((user.isLoggedIn && user.hasPermission(page.getRequiredPermission()) && !user.isBanned) || page.getRequiredPermission() == null)
); это тоже обычно довольно сложно расшифровать, и код должен быть переписан во что-то более структурированное. Скорее всего, выражение делает слишком много и должно быть вынесено в метод или функцию.
- Длинные литералы, используемые в вызовах функций или выражениях, например
print(translate(LANG_EN, LANG_ES, "This is the home page. Feel welcome to click around and see what we have."));
. Переместить литерал в переменную или константу; он все равно может превышать длину строки, но если вы делаете это последовательно, читатель может, по крайней мере, безопасно игнорировать невидимую часть строки, предполагая, что следует только остаток литерала. Или, что еще лучше, переместите литералы из кода во внешнее хранилище данных (файл, база данных и т. Д.).
- Глубоко вложенные операторы, например, шесть уровней
if
операторов в методе класса (это 32 столбца отступа для типичных настроек). Опять же, глубокое вложение создает сложный и трудно читаемый код, и его следует избегать, как чумы - проще говоря, глубокое вложение переполняет стек человеческого мозга при чтении.
Все это, в конечном счете, является признаком того, чего в долгосрочной перспективе вы бы не хотели иметь в своей кодовой базе, а соблюдение 80-символьных ограничений является хорошим и простым способом, который помогает снизить сложность и повысить удобочитаемость. (Это не значит, что вы не можете написать совершенно нечитаемый код в 80 столбцах: различные конкурсы «запутанный код что-то» являются ярким контрпримером).