Описове іменування проти 80 символьних рядків [закрито]


17

Я часто чую ці дві цінні практики програмування: (1) рядки коду повинні містити 80 символів або менше і (2) використовувати описові назви змінних, методів, класів тощо. Я розумію міркування обох цих порад. , вони, здається, часто є компромісами один одного. Якщо я тримаю свій код нижче 80 символів / рядка, я в кінцевому підсумку використовую менш описові імена (наприклад, на Python, де кожен відступ рахується як 4 символи), але якщо я використовую більш описові імена, я закінчую рядки, що перевищують 80 символів.

Отже, моє запитання: який із цих двох порад важливіше дотримуватися, якщо вибір потрібно зробити? Мені це цікаво як незалежного (хобі) програміста, але що ще важливіше з точки зору інженера-програмного забезпечення, який працює в більшій компанії.


4
@BillyONeal З великими екранами, 120 :)
BЈовић

4
Я думаю, що мені потрібно щонайменше 130
9дан

8
Я вважаю за краще 80, тому що потім можу легко відкрити 2 файли поруч на своєму ноутбуці.
Хонза Брабек

5
Рядки довжиною більше 80 символів мають тенденцію до читання. Тож 80 - хороша межа. Описовий не повинен бути занадто багатослівним. І це залежить від сфери застосування: невеликий діапазон коротких імен змінних, великий обсяг довших імен. І в будь-якому разі уникайте змінних з великим обсягом. Якщо ви знаходитесь на ньому, використовуйте функціональну мову та розбивайте код на більш дрібні функції, коли він має надто глибокі відступи -> дуже малий діапазон == короткі імена. Назви функцій схожі, але зазвичай трохи довші, оскільки їх обсяг більший.
Peer Stritzinger

4
@ ott--: Ви бачили редактора, який насправді може перервати довгий рядок, відповідно до синтаксису C ++, і подати продовження з відступом на ще один рівень, ніж на початку? Інакше така пропозиція марна.
Ян Худек

Відповіді:


34

Зробіть кілька відступів, ваші імена описовими, і не бійтеся порушити рядок.

Зберігайте відступи кілька.

Часто, коли я опиняюся в боротьбі між відступами та описовим називанням, я роблю крок назад і дивлюсь на свій рівень відступу. Якщо ви відступаєте більше 3-х або 4-х рівнів (2 рівня є автоматичними та неминучими у багатьох випадках. Читайте: визначення методу класу), можливо, ви захочете реструктурувати свій код, віднісши функціональність до функції чи методу.

Ваші імена описові

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

Не бійтеся перервати лінію

Лайно буває. Якщо ви перейдете понад 80 символів, і ви все одно не бачите, щоб повернути будь-який пробіл у рядку - розбийте його. Більшість мов не переймаються розривами рядків, тому розбийте їх на кілька. Не вибирайте просто випадкове місце. Зберігайте речі згруповані логічно та відступайте на іншому рівні, коли ви перериваєте лінію.


3
Слід зазначити, що описові назви не збігаються з довгими іменами. Уникнення повторення речей, які легко видно з контексту, і жменька ретельно підібраних скорочень (лише для дуже поширених понять) може пройти довгий шлях до коротких описових назв.
Ян Худек

18

Чому не обидва?

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


1
+1: Чудова відповідь, за винятком того, що я не згоден з відхиленням літералів від коду. Коли ви знаєте, який літерал ви шукаєте, ви можете однаково добре поздоровитись за ним у ресурсах чи коді, але коли ви працюєте з кодом і потребуєте модифікувати літерал, то для того, щоб полювати на нього в окремому файлі, це досить відволікає. Також зауважте, що всі мови мають певний спосіб поділу літералів на кілька рядків, що я б робив у такому випадку.
Ян Худець

Звичайно, речення, яке використовується як приклад довгого літералу, не має місця у вихідному коді. Такі речі йдуть у шаблони сторінок. Але для таких речей, як повідомлення про помилки, я вважаю за краще зберігати їх з кодом, який їх випромінює.
Ян Худек

@JanHudec: Звичайно, переміщення літералів у файл даних не завжди має сенс. Я говорю про занадто довгі літерали, і з тими, я рідко бачив приводу, коли визначення їх у інших місцях погіршило б код: довжина тексту порушує читання, тоді як сенс цього легко може бути конденсований в ім’я постійної чи змінної, яке ви потім визначаєте в іншому місці. Повідомлення про помилки - це, напевно, виклик судження.
tdammers

16

Описові назви є FAR важливішими. У більшості інтерфейсів ми можемо прокручувати, щоб побачити довші рядки. Ні в якому разі система не може допомогти вам перекласти неіснуючі змінні та функції.


2
Це. Перестаньте ламати лінії на X символах, нехай IDE впорається з цим. В іншому випадку ви турбуєте всіх інших користувачів (включаючи майбутніх вас!), Хто на екранах / IDE може обробляти 2 * X символи з кодом, який більше не розміщується на одній сторінці.
Конерак

4
Питання стосувалося неявно довгих імен. І я не згоден, що імена повинні бути довгими - більшість часу вони повинні бути короткими . Описові, довгі імена можуть зробити код важчим для читання, ніж трохи менш описові, але більш короткі імена! (Занадто довгі рядки взагалі важко читати.)
Конрад Рудольф

4
Я не погоджуюсь. Якщо я не можу побачити код відразу, важко прочитати, незалежно від того, наскільки описовими є назви.
Jan Hudec

4

80 символів у рядку не складно зустріти, навіть іменування довгі, тому що існує багато способів розбити один рядок довгого коду на кілька коротких кодів, наприклад, я можу розбити заяву про умову на C на кілька рядків, щоб вмістити менше 40 символи,

if ( a == b || c == d  || d == e
    || c == e || c == a || c == k
    || c == l)

Ви також можете розділити лінію виклику функцій на кілька ліній.

Тому обидва правила описового іменування та 80 символьних рядків не суперечать, вони можуть співіснувати для поліпшення читабельності.


2
Чи справді 80 символів покращує читабельність? Який екран не може легко зробити 120 в наші дні?
Біллі ONeal

7
@BillyONeal простіше сканувати на ширину понад 80, ніж ширину понад 120
урожай храповика

2
газета розбивається на колонки, і ви можете отримати більше інформації від ux ux.stackexchange.com/questions/3618/…
нео

1
Порушення логічної умови вдосконалює читабельність, коли розриви рядків відповідають структурі умови, але не обов'язково, якщо вони відповідають лише деякій довільній межі.
mikołak

1
@BillyONeal: більшість екранів можуть робити 120, але навряд чи можна зробити 240. Або ви ніколи не порівнюєте різницю?
Хуберт Каріо

0

Межа 80 - це те, що мало би давно збільшено. Зауважте, що цей ліміт використовується з віку, коли довжина кожного ідентифікатора була обмежена 8 символами та лише одним шрифтом на екрані / принтері. Немає можливості зміни розміру шрифту.

Боже, у нас зараз різні технології екранування та друку. У нас дуже різні мови програмування. Більше немає причин використовувати 80 символів. Збільшити його принаймні до 120 знаків.

Навіть тоді це не повинно бути жорстким обмеженням. Ви переходите один символ за лінію? Ну, нічого не буває!

Редагувати:

Детальні відповіді про історію 80-лімітного ліміту

Символи на рядок у Вікіпедії

Дослідження в Державному університеті Вічіта показало, що CPL має лише невеликий вплив на читабельність, включаючи фактори швидкості та розуміння. Коли запитували про переваги, 60% респондентів вказали на перевагу або за найкоротші (35 CPL) або найдовші (95 CPL) рядки, які використовувались у дослідженні. У той же час 100% респондентів обрали будь-яку з цих кількостей як найменш бажану.


4
Ні, ліміт точно не повинен бути збільшений. Оскільки це не має нічого спільного з технологією екранування та друку, лише з тим, що 80 символів на рядок - це приблизно максимальний людський погляд, можна зручно сканувати (66 символів вважається оптимальною шириною рядків, меншою - при друку в багато стовпців). Це, до речі, означає, що більшість книг мають трохи менше 80 стовпців для зразків коду.
Ян Худек

3
@JanHudec Це все, що стосується технології екрана / друку. Зверніться до програмістів.stackexchange.com/ questions/ 148677/… . Рішення перейти на 80 персонажів - суто історичне, не засноване на дослідженнях. Не могли б ви додати посилання на дослідження, щоб підтвердити свою думку?
Султан

Ще одне питання вже отримало це посилання на UX у коментарях; подальші посилання там. Хоча саме число 80 є історичним збігом обставин, воно грубо походить від кількості ударів за рядок на друкарських машинках, що було грубо виведено із загальної ширини одноколонного друку і в середньому 66 літер.
Ян Худек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.