Чому деякі мови рекомендують використовувати пробіли, а не вкладки? [зачинено]


10

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

Чому такі мови, як Python, рекомендують використовувати пробіли на вкладках?


24
Ви можете налаштувати більшість редакторів, щоб вставляти пробіли замість вкладок під час натискання tab. Якщо ви не можете налаштувати це у своєму улюбленому редакторі, вам потрібен кращий редактор.
Адам Лір

одне, багато редакторів можна налаштувати, щоб вставити 4-8 пробілів, коли натиснути «вкладку», тому це лише одне натискання клавіші, як і вкладка.
Echo каже: Відновіть Моніку

2
Це все ще не відповідає на моє запитання. Чому пробіли замість вкладок? Звичайно, ви можете налаштувати свій редактор, щоб замість вкладок вставляти пробіли, але, можливо, ви також можете вставити вкладки з пробілами. Питання в тому, чому ви хочете це зробити? Яка можлива вигода отримана?
Naftuli Kay

4
@Tk Spaces - це однозначні вкладки, які можна змінити
Martin Beckett

3
@TKKocheran, тому що вкладки роблять неприємні речі на ваш вихід, коли ви випадково вставляєте їх у рядок.
zzzzBov

Відповіді:


15

Послідовність, насамперед.

Крім того, іноді трапляється щось, що фактично використовує пробіл - наприклад, Python: Скажіть, що буде, якщо я запустять наступний фрагмент коду?

def foo():
    print "a"
    print "b"

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

Тоді є розчаровуючі випадки, коли один редактор розробника має вкладки на 8 просторів, а інший встановлює їх на 4, а хтось використовує 5 з якоїсь дивної причини ... Це може виглядати цілком нормально на одній робочій станції, але тоді, коли це зареєстровано в SVN та хтось інший оновиться, вони побачать жахливий, жахливий безлад.

Тож це дві дійсно вагомі причини завжди бути послідовними, будь то пробіли чи вкладки.

Але пробіли дозволяють набагато більше контролювати відступ, ніж вкладки, і не потрібно спеціальної конфігурації в редакторах, щоб вона працювала. (Хоча це може бути простіше - наприклад, vim, просто використовуйте set expandtabдля вставки пробілів, коли ви натискаєте вкладку)

EDIT: І досить забавно, здається, що сайт нормалізував мої вкладки на пробіли, щоб браузер міг правильно відображати його. Клацніть на "редагувати", щоб переглянути оригінал, включені вкладки;)


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

@HorusKol Ні, жахливий безлад тому, що пробіли та вкладки змішалися. Напевно, я цього не зробив досить очевидним (див. Одиноке речення після рядка "жахливий, жахливий безлад"). Таким чином, пробіли були зроблені для вирівнювання з вкладками, коли вони встановлені в еквіваленті 4-х просторів, але тоді, коли хтось інший перегляне його (незалежно від того, встановлено вкладки-пробіли), вони безладно.
Ізката

4
Я бачу - ну, вам потрібно встановити настанови для своєї команди - або послідовно використовувати пробіли АБО вкладки ... так чи інакше, вкладки в пробіли - це погана ідея в усьому світі;)
HorusKol

21
Ось чому я вважаю ідею про значущі для пробілів мови як ваду дизайну. Те, що ви не можете бачити, ніколи не повинно порушувати ваш код.
Пол Натан

Тільки для запису, я згоден з @PaulNathan
Ізката

11

Це хороша дискусія про відступ та пробіли в Python; зі статті:

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

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

Для себе я віддаю перевагу пробілам, оскільки код завжди відображається з однаковою кількістю відступів, незалежно від того, чи переглядаю я його в IDE less, або в Блокноті; тобто простори є більш портативними.


3
re: "Я переглядаю його в IDE, або менше, або в Блокноті; тобто пробіли є більш портативними" - це найкращий аргумент для просторів, які я коли-небудь чув. Я сам "вкладки", але час від часу не любив бачити код, розміщений на вкладках, винесений несподівано.
Ерік

2

У Python відступ контролює потік програми, і так важливо.
Якщо ви берете код, відформатований за допомогою вкладок, і скопіюйте його так, щоб вкладки були змінені або втрачені, структура коду зруйнована. Простори - це простори = набагато безпечніше.

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


Мене більше хвилює витрачений час, набравши простір або зворотній простір чотири рази проти одного натискання клавіші, щоб зробити і те, і інше.
Naftuli Kay

Так, але Python таким чином дивний. Я ніколи не стикався ні з чим іншим, що піклується про простори.
Аерік

@TKKocheran О, це ваша справжня турбота? Я не знаю, як вони це зробили, але vim на моїй роботі налаштований так, що зворотний простір повертається до останнього табустопа, через декілька пробілів, повністю прозоро
Izkata

Не могли б ви .vimrc
завалитись

1
@TKKocheran Знайшов - це просто set softtabstop=4, і TAB і BACKSPACE використовуватимуть 4 пробіли як вкладку. (Ну, до кожного табустопа, трактуючи ширину як 4 пробіли)
Ізката

2

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

Для прикладу одного стилю, який зазвичай потребує пробілів, розгляньте щось на кшталт:

call_some_function(parameter1,
                   parameter2,
                   parameter3,
                   parameter4,
                   parameter5,
                   parameter6,
                   parameter7);

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

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

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

a.m = 9;   // this is the slope
a.i = 4;   // this is the intensity
a.x = 1;   // this is the x-intercept

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

a.m = 9;          // this is the slope
a.i = 4;  // this is the intensity
a.x = 1;          // this is the x-intercept

Раптом невелику різницю в ширині між 'i' і 'm' або 'x' у нашому шрифті змінної ширини було збільшено до цілої зупинки вкладки.

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

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

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


1
Я бачу, ви кажете, що "пропорційні шрифти розбивають і пробіли, і вкладки, але вони ломають вкладки гірше, тому використовуйте пробіли". Чому б не скористатися еластичними накладками? nickgravgaard.com/elastictabstops
amara

@sparkleshy: Це хороша ідея, але не має значення для реального коду, і не буде, поки всі (або принаймні переважна більшість) реальних редакторів вже не включать її.
Джеррі Труну

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

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

1
@BrianKnoblauch: Як хтось, хто використовує шрифт eurofurence, я повинен погодитися. Єдині речі, які коли-небудь створюють мені проблеми, - це пробіли. Це також пов'язане з моїм стилем відступу, звичайно, який ніколи не відрізняється більш ніж на одну вкладку між рядками. Якщо припустити, що я колись отримую еластичні вкладки, мій код буде виглядати ще краще.
Маг

2

Великою проблемою є невідповідність ширини "вкладки", іноді вони відображаються як чотири пробіли, іноді вісім. У багатьох редакторах ви можете встановити їх на рівні від 1 до 9 пробілів.

Таким чином, це перетворює простий редактор WYSWYG в те, що ви бачите, те, що хтось інший МОЖЕ отримати.

Це особлива проблема для Python, але вона також є проблемою в будь-якій з "фігурних дужок" мов, оскільки відступ використовується для передачі значення людським читачам, а переплутані вкладки ускладнюють читання коду.

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