LINUX.ORG.RU

Форматирование кода. Tab || whitespace?


0

0

По мотивам http://sotakone.habrahabr.ru/blog/77155

* Никаких табов в исходниках, одни только пробелы.
* Никаких лишних пробелов в конце строки. Никогда. Ни при каких обстоятельствах.

Если второе это обычное правило хорошего тона, то второе есть хороший вопрос и давний холивор.
С некоторых пор я привык всегда во всех редакторах включаю подсветку пробелов и табов.
Последнее время, программирую на C и Python. Если на С и в некоторых самописных скриптах часто встречаются табы, то в больших проектах везде стоят пробелы.
Вопрос: Почему пробелы лучше табов? Чем?
В старом cpp@c.j.r было обсуждение Tabs vs WSs и пришли к выводу что у табов есть такие плюсы:
1) Размер таба можно менять в редакторе, что позволяет корректировать отображение кода(а точнее отступы) под себя/свой монитор.
2) 1 таб легче ввести нажав один раз нужную кнопку.
3) 1 таб легче удалить нажав один раз Backspace.

А у WS..

В общем, хотелось бы услышать мнение ЛОР'овцев.


Был уже не так давно горячий спор по этой теме.

Моё мнение вкратце - я предпочитаю логическую разметку, а не визуальную. Поэтому - только табуляция.

KRoN73 ★★★★★
()

>2) 1 таб легче ввести нажав один раз нужную кнопку. 3) 1 таб легче удалить нажав один раз Backspace.

даже IDLE умеет заменять табы пробелами и удалять их за один бекспейс.

stave ★★★★★
()

В больших проектах исходные тексты форматируют разные люди, у которых не совпадает размер шага табуляции (2, 4, 6 или 8 символов).

Поддерживать такие исходники в CVS очень громоздко из-за избыточности изменений, вызванных простым переформатированием кода от каждого нового разработчика, который касается этого кода.

Поэтому приняли всеобщий стандарт: для групповой работы над проектами Tab'ы не использовать, а отступы делать пробелами.

iZEN ★★★★★
()

Все 3 пункта работают с нормальным текстовым редактором типа kate или vim с табами. а вообще бывает довольно забавно - вот официальный кодстайл от qt4 и одно из популярных проектов на нем же:
http://qt.gitorious.org/qt/pages/QtCodingStyle
http://wiki.qutim.org/правила_кодирования

называется найдите 2 отличия...

Turbid ★★★★★
()
Ответ на: комментарий от iZEN

>Поэтому приняли всеобщий стандарт: для групповой работы над проектами Tab'ы не использовать, а отступы делать пробелами.

Угу. И поэтому у разных людей будет разный размер отступа :)

KRoN73 ★★★★★
()
Ответ на: комментарий от iZEN

>В больших проектах исходные тексты форматируют разные люди, у которых не совпадает размер шага табуляции

для этого и придумали стандарты, которые первым делом заставляют читать тех, кто собирается закомитить код в большой проект.

stave ★★★★★
()

Когда пишу в Emacs - пробелы и только. Потому что будет одинаково выглядеть везде.

В студии - табы.

В Сквике - табы.

yoghurt ★★★★★
()

любой нормальный редактор позволяет как табы заменять пробелами, так и наоборот

ananas ★★★★★
()
Ответ на: комментарий от iZEN

Поэтому приняли всеобщий стандарт: для групповой работы над проектами Tab'ы не использовать, а отступы делать пробелами.

Не сочтите за неуважение, но хотелось бы узнать источник ну или какие-нить пруф-линки.
Ибо уж как-то оно бредово. При всех плюсах tab'ов для написания кода, выбрать пробелы...

tia
() автор топика
Ответ на: комментарий от mannaz

Процитирую пользователя с хабра:

Основное достоинство табов — можно выставить такой размер отступа, какой мне нравится. Я люблю 4, а кто-то любит 8 — нахера мне потом эту лестницу разбирать?

tia
() автор топика
Ответ на: комментарий от tia

4, 8 - это важно вообще? Я считаю, что в подобных вопросах для любого программиста не должно составлять проблемы писать код в соответствии с общепринятыми в команде правилами. В противном случае человек этот п**дор и занимается какой-то ерундой.

mannaz
()

Так будет всегда.
Но поскольку сам иногда останавливаюсь и начинаю переделывать форматирование во всём документе, хотелось бы знать, есть ли какие-то приспособы для изменения форматирования уже существующего кода?
Знаю, что в eclipse есть что-то подобное.

markevichus ★★★
()

Разве автоматическое переформатирование кода кто-то отменил? Сейчас табы у одного, через 5 минут взял код другой человек и у него пробелы стали. Тоже самое и со скобками и т.п. Это встроено в редакторы. Проблемы нет вообще.

anonymous
()
Ответ на: комментарий от markevichus

Переформатирование кода есть в Eclipse, KDevelop, также есть программа indent. Какое хотите форматирование, такое и задавайте для себя.

anonymous
()

sotakone, пройдите в палату №6

xydo ★★
()
Ответ на: комментарий от ananas

>вот только если в коде помесь табов с пробелами - может получиться сплошная порнография

Ничего подобного. Программам переформатировщикам кода безразлично пробелы или табы, это одинаковое пустое пространство. Они сделают как их попросите, на любой вкус: сделать отступы из 7 пробелов или из 3 табов и фигурные скобки расставить на новой строке или в конце существующей. И много всего другого.

anonymous
()
Ответ на: комментарий от anonymous

форматировщикам - таки пофиг. а попытайся подобное less-ом глянуть - много ругани обеспечено

ananas ★★★★★
()
Ответ на: комментарий от ananas

> man sed частности - man indent, man astyle

еще man expand unexpand

dilmah ★★★★★
()
Ответ на: комментарий от markevichus

хотелось бы знать, есть ли какие-то приспособы для изменения форматирования уже существующего кода?

gedit + самописный скрипт на баше

Пользуюсь, когда использую куски чужого кода с форматированием пробелами.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от markevichus

в эклипс, нетбинс(alt+shift+F) есть автоформатирование под выбранный coding style.

впрочем уверен, что в emacs, vim тоже есть :)

qnikst ★★★★★
()
Ответ на: комментарий от yyk

>форматировать только пробелами, причём неразрывными =))))

Срочно вырабатываю рефлекс отпускать после пробел 4го символа. Разумеется в слепую. Настройки для клавиатуры носить с собой на бумажке.

roller ★★★
()
Ответ на: комментарий от roller

>Срочно вырабатываю рефлекс отпускать после пробел 4го символа

4 раза пробел обычно успеваешь нажать быстрее, чем проходит типовая задержка перед автоповтором :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>Моё мнение вкратце - я предпочитаю логическую разметку, а не визуальную. Поэтому - только табуляция.

Поддерживаю. Хотя, конечно, если писать на хаскеле...

runtime ★★★★
()

>> Никаких лишних пробелов в конце строки. Никогда. Ни при каких обстоятельствах.

суровые будни -:))))))

kto_tama ★★★★★
()

Только пробелы.

Размер таба можно менять в редакторе, что позволяет корректировать отображение кода(а точнее отступы) под себя/свой монитор.

Тот, кто это говорит, явно никогда не правил чужой код. Чуть не так настроил, как твой сосед, и форматирование превращается в говно.

1 таб легче ввести нажав один раз нужную кнопку.

Настрой редактор. Даже вижуалстудия умеет заменять табы на пробелы при вводе.

1 таб легче удалить нажав один раз Backspace.

В результате чего попытка удалить несколько пробелов в начале строки выливается в удалённый конец предыдущей и горизонтальный скроллинг.

Miguel ★★★★★
()
Ответ на: комментарий от KRoN73

> Угу. И поэтому у разных людей будет разный размер отступа :)

Отступ - не член, чтобы беспокоиться о размерах.

Miguel ★★★★★
()
Ответ на: комментарий от Miguel

>Отступ - не член, чтобы беспокоиться о размерах.

Возвращаю в контекст: «разные люди, у которых не совпадает размер шага табуляции (2, 4, 6 или 8 символов).»

KRoN73 ★★★★★
()

>то в больших проектах везде стоят пробелы.

Кстати, ядро Linux - это большой проект или маленький? :)

KRoN73 ★★★★★
()
Ответ на: комментарий от linuxfan

>Это глючный проект.

Ну, если он глючный - то мне с глюками по пути :)

KRoN73 ★★★★★
()

у меня табы везде. и кто только придумал эти пробелы ума не приложу

VladimirMalyk ★★★★★
()
Ответ на: комментарий от Miguel

> Чуть не так настроил, как твой сосед, и форматирование превращается в говно.
Это как? У вас в IDE шрифт не моноширный? плюс мне удобно отступ в 2 симлова, соседу в 5. чем как не табом это делать?

Настрой редактор. Даже вижуалстудия умеет заменять табы на пробелы при вводе.

Нахрена?

В результате чего попытка удалить несколько пробелов в начале строки выливается в удалённый конец предыдущей и горизонтальный скроллинг.

Так нефиг эти пробелы в начале строки дражать - для этого достаточно делать отступы табуляцией

VladimirMalyk ★★★★★
()

4 пробела устраивают меня больше всего, и не вызывают никаких проблем у тех с кем мне приходилось встречаться. Поэтому для того кода, который я пишу с нуля, я использую 4 пробела. Для всех языков.

Если сильно хочется универсальной логической вёрстки, чтобы у меня было 4 символа таб, у кого то 3, у кого то 8 - надо смешанную вёрстку (табами уровень, пробелами подгонять, если нужно вертикальное выравнивание). Это делать муторно, без специальной подстветки табов практически нереально.

Legioner ★★★★★
()
Ответ на: комментарий от Miguel

Тот, кто это говорит, явно никогда не правил чужой код. Чуть не так настроил, как твой сосед, и форматирование превращается в говно.

<tab>void foo(int bar,
<tab>_________char *foobar)
<tab>{
<tab><tab>int i = bar +
<tab><tab>________1;
<tab>}

и никаких проблем. Но писать такое, имхо, неудобно и error-prone, если можно так выразиться.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Во первых, есть modeline… написать modeline — и у читающего код не будет никаких проблем.

А писать такое — это не в любом редакторе настраивается?

anarquista ★★★★★
()
Ответ на: комментарий от anarquista

>Во первых, есть modeline… написать modeline — и у читающего код не будет никаких проблем.

Что за моделайн?

anonymous
()

В нормальной IDE по нажатию табуляции вставляется 4 пробела, это первое.
Второе: автоформат кода перед коммитом.
Пользуйтесь полноценными IDE, а не поделками, годными лишь редактировать property-файлы.

JFreeM ★★★☆
()

>плюс мне удобно отступ в 2 симлова, соседу в 5. чем как не табом это делать?
увольнять соседа или тебя, очевидно же. Код команды должен быть единообразным и о том, каким именно следует договориваться на старте проекта и в дальнейшем соблюдать. Разводить десткий сад с спорами о том, сколько кому удобно отступов ни один собственник за его деньги делать вам не даст.

JFreeM ★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.