Чому відсталий пробіл - це велика справа? [зачинено]


116

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

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


30
Трейлінг пробілу дійсно видає шум. Не можу придумати жодної іншої причини.
янніс

17
Хороший інструмент порівняння повинен бути в змозі ігнорувати кінцеві (і ведучий теж, якщо ви хочете) пропуску. Зрештою, Emacs може це зробити, чому б не ваші різні інструменти?
FrustratedWithFormsDesigner

4
Навігація до кінця рядка за допомогою кнопки 'End' може бути безладно з великою кількістю пробілів.
Ярек Ковтуненко

11
Я думаю, ви ставите питання невірним шляхом. Навпаки: «які переваги у білих проміжках? ». Відповідь стає досить очевидною, коли задаєте правильне запитання;)
deadalnix

7
Можливо, вам варто спробувати програмування в Whitespace . * 8 ')
Марк Бут

Відповіді:


76

Причини, які для мене важливі:

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

  • Коли у мене є літеральні рядки, які охоплюють декілька рядків, пробіл пробілів може зробити висновок рядка неправильним при використанні.

Хоча це не суворо програмування, пробіл може серйозно зіпсувати введення даних, якщо у файлі є трейлінг / ведучий, який буде проаналізований та використаний як вхід до чогось іншого. Найчастіше це відбувається, коли чистий, згенерований вхідний файл ослаблений тим, хто редагує його в Excel або щось інше, а потім може прокрастися пробільний пробіл (та інші проблеми форматуванняS).


8
Точка 1 - це проблема з вашим редактором, а не з пробілом білого кольору.
Мар'ян Венема

32
@MarjanVenema: Так, редактор міг би бути призначений для переходу до останнього пробілу NON-пробілів, але тоді ти ніколи не дізнаєшся про пробільний пробіл (якщо тільки це не вказано іншим способом - також, напевно, мені здасться дивним, що END не робить Не піду до кінця рядка, до чого я звик). Що було б проблемою з багаторядковими рядковими літералами. Тож тоді редактору доведеться знати, що в багаторядковому рядковому літералі END повинен переходити до останнього символу, включаючи пробіл. Редактор, який я використовую, не такий розумний.
FrustratedWithFormsDesigner

2
Я б додав, що вибір з допомогою миші важко зробити без вибору додаткових пробілів, і це може мати значення, якщо мова йде про вирізану пасту. Або що він створює шум, коли здійснює (зрештою, конфігурує!) Дарма. Не дуже велика справа, але багато маленьких помазок. Це дає відчуття, що попередній дев був лінивий і очікуєш, що ти підеш у його безлад.
deadalnix

1
@deadalnix: звичайно, саме тому вам потрібен хороший редактор з опціями, що відповідають вподобанням більшості людей. Отже, точка 1 - це проблема з редактором, а не з пробілом у пробілі.
Мар'ян Венема

1
Точка 1 саме тому я віддаю перевагу конкретному стилю пробілів пробілів: порожні рядки з відступом коду, який вони відокремлюють. Це дозволяє негайно вставити новий код без відступу.
Xiong Chiamiov

29

Я дуже ненавиджу пробіли пробілів, але точна причина трохи розпливчаста.

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

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

  • Це займає більше місця для зберігання, ніж потрібно
  • Аналізатору доведеться пропускати зайвий символ без поважних причин при компілюванні
  • Деякі редактори можуть додати додатковий порожній рядок, коли WordWrap увімкнено, а пробіл не поміщається

Так, так, я знаю! Я знаю, це непотрібні причини. Я не перфекціоніст, але ... ну, може, я?

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

Можливо, у мене може бути поставлений діагноз «сліпуватофобія»?


Це не моє поле, але мені це здається дивним ... яку систему набору ви використовуєте там у настільній публікації, яка не ігнорує трейлінг / кілька пробілів за замовчуванням ? Я вважав, що те, як це роблять LaTeX та більшість мов програмування, є стандартним скрізь, за винятком випадків, коли у споживачах є WYSIWYG мотлох.
Ліворуч близько

Adobe InDesign (чи це також підпадає під рівень споживчого сміття WYSIWYG?). Так, він буде ігнорувати пробіли, але замінить усі стрічки рядків пробілами в абзаці, і ви отримаєте подвійні пробіли (які не ігноруються), тоді для їх усунення потрібна додаткова заміна.
Луї Сомерс

"Настільна публікація" - це не те, що ви робите із "системою набору".
rakslice

22

Багато цих відповідей майже стосуються причини, яка мені погана, але в основному: це "ламає" текстові редактори. Мій досвід - з vim.

Vim розроблений таким чином, що загальні дії відображають букви настільки чисто, що вам навіть не потрібно думати про те, яку букву чи комбінацію клавіш вдарити. Різні гарячі клавіші дозволяють курсору стрибати навколо тексту так швидко, що потрібно лише кілька натискань клавіш, щоб дістатись туди, куди ви хочете. Навіть такі речі, як складання блоків коду, швидко, оскільки ви можете натиснути END або $, щоб перейти до кінця рядка, де курсор повинен перекриватися {або} або (або) чи щось інше - немає необхідності переривати ваш потік думок, щоб отримати уявлення на екран.

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

Ви коли-небудь помічаєте, як дратуються люди, коли вони дійсно зосереджені на завданні, і хтось їх перериває? Так, пошук пробільних пробілів, коли це найменше очікується, саме такий.

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


2
З іншого боку, швидкість введення тексту не має нічого спільного з тим, використовуєте мишу для навігації чи ні. Деякі навігації цілком підходять для миші. ; p
Стівен Євріс

2
Якщо ви користуєтеся vim, ви можете швидко видалити всі пробіли:%s/ *$//
Джорджіо

1
@ Giorgio Я знаю, але я не можу просто зробити це в будь-який час, тому що це вважається зміною контролю версій
Izkata

@izkata: Правда. Я переформатую файли, які я повинен змінити, перш ніж перевірити їх, але це програна битва, якщо інші розробники продовжують перевіряти файли з пробілом пробілів.
Джорджіо

17

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

Найбільш очевидна ситуація - це рядкові рядки. Python, JavaScript та Bash - кілька прикладів мов, на які це може вплинути:

print("Hello\·
····World")

виробляє:

  File "demo.py", line 1
    print("Hello\
                 ^
SyntaxError: EOL while scanning string literal

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

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

введіть тут опис зображення

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

Інший контекст, коротко згаданий у попередній відповіді , - це дані, що зберігаються у файлах.

Наприклад, файли CSV, які містять пробіли пробілу, можуть спричинити невідповідність даних, що також дуже важко виявити: аналоги, що відповідають стандартам, будуть обробляти пробіли (стандарт вказує на те, що провідний чи трейлінг пробілів не має значення, якщо не розмежований подвійними лапки), але деякі парсери можуть неправильно поводитись і зберігати пробіли як частину значення.

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


14

Нещодавно я провів день, шукаючи помилку, яка виявилася несподіваною пробільною пробілкою даних.


13
Я думаю, що це помилка; обробка коду, що генерується людиною, повинна відкидати пробіли пробілів, і часто провідні пробіли також повинні бути відкинуті.
кевін клайн

@kevincline - Це повинно бути принаймні. Якщо це не видно на екрані чи на роздруківці, я не хочу думати про це.
Грак

6
Тому що ви витратили день на пошуки помилок, відстежуючи пробіли - це велика справа? Будь ласка, відредагуйте свою відповідь, щоб вона була більш загальною. Додайте трохи досвіду, аргументації, ... У мене особисто ніколи не було проблем із пробілами, але я не використовую це як висновок, що вони теж не є проблемою.
Стівен Євріс

2
@Steven Trailing пробіли спричинили помилку, яку важко було знайти. Здається, це хороша відповідь для мене. Ви можете собі уявити, як який-небудь код аналізу даних може зламатись у цій ситуації.
Буде Шеппард

Я видалив пробіли в кінці даних, і тепер тест не вдається. Ви за це відповідальні. Як вас звати? Куди мені надіслати рахунок?
Томас Веллер

8

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

if (fp)........
{....
    fclose(fp);.
}
else
{.....
    prinft("File is NULL\n");
}..

Цей приклад є штучним, але я бачив багато коду, який виглядає приблизно так.


7

Окрім очевидної проблеми, яка порушує розбір у певних випадках? Як зазначає інший плакат, це може спричинити тонкі та важкі для відстеження помилки. Пробіл не завжди є незначним. У деяких випадках пробільний пробіл може значно змінити значення рядка коду або даних.

У більшості випадків пробіл існує для форматування коду для людських читачів. Пробіл пробілу може вказувати на кілька речей, зокрема:

  • Неповна заява;
  • Відсутній коментар;
  • Помилкова редакція; або
  • Недбале редагування.

Два з них можуть спричинити неправильне функціонування, а інше може ускладнити розуміння коду.


4

Існують мови програмування, чутливі до пробілів кінцевої лінії. Наприклад, скрипт TCL видасть помилку, якщо в кінці рядка є пробіл.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.