Чому не обидва?
Перш за все, "описовий" і "багатослівний" не є однаковим. Наприклад, якщо ви пишете досить локальний цикл, 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 стовпцях: різні конкурси з прихованим кодом - це явний зустрічний приклад).