Как стать автором
Обновить

Комментарии 217

Вы говорите глупости потому-что не умеете пользоваться табуляцией.
Ненавижу пробелы там, где логически должна быть табуляция (поддерживал несколько проектов с такими Style Guide — чут ьне обблевался).
Больше людей предпочитают табы вместо пробелов.
А то, что вы выдаете за истину — ошибочное утверждение от незнания.
Объясняйте свою позицию, а не просто «блюю от пробелов», и «вы просто не умеете их(табы) готовить»
Ок, сейчас напишу развернутый ответ.
Спасибо за достойный ответ :)
Хорошие аргументы за использование табов, не все конечно, например, при перемещении по началу строки проще использовать «Home», т.к. не важно сколько табов и пробелов перед началом строки.
Сам же, использую пробелы не из-за идеологии, а скорее из-за традиции, т.к. все в комманде используют пробелы, заставить всех перейти на табы достаточно проблематично, а ввиду банальной лени не сильно и хочется.

P.S. Как и в случае div vs table, истина где-то посередине!
Некропост, но: сейчас работаю в XCode — попытка перехода кнопкой Home в начало строки заканчивается неприличным словом. А всё потому, что везде в яблоке началом строки считается не там, где начинаются первые осмысленные символы после пустого пространства, а само начало строки, до которого нет ничего. Это очень проблематично использовать пробелы.
Но теперь то я нашёл эту вредную статью, в которой упоминаются и Far и WinMerge. К Far'у не испытываю неприязни, а вот когда из-за ручного мержа моего напарника (на который убивается минимум час) теряются мои правки и баги приходится править по три раза — опять же это заканчивается плохими словами про себя.
Вероятно в самых запущенных случаях WinMerge полезен, но не при каждом принятии изменений из репозитория. А технология мержа у моего напарника совсем повергает меня в уныние: имеется две папки, первая с только что принятыми изменениями, вторая с собственными правками. И методом туда-сюда все файлы приводятся к единому виду. Подскажите мне, где и в какой ситуации плюсы от такого подхода при каждом мерже будут перевешивать минусы?
Тем более подход ручного мержа очень уязвим к человеческому фактору — не может человек каждый раз помнить, где надо поправить, а где принять изменения.
НЛО прилетело и опубликовало эту надпись здесь
Попробуйте «бегать» по пробелам с нажатой клавишей Ctrl, мне помогло.
В приличных редакторах home выставляет курсов на начало текста в строке… Но вам это познать кажется не светит :)
В редакторах, что я встречал иногда иногда даже с прстейшим английским текстом типа endif или endfor разобраться не могут. Хорошо, что мэйнтенеры Ubuntu переадресовали «мой» баг куда-то в глубину GNOME, где, видимо, нашёлся человек понявший мой soviet english… Но если они его поняли у нас нет никакого стратегического преимущества…
НЛО прилетело и опубликовало эту надпись здесь
То что таб нажимать быстрее и легче, чем несколько раз пробел не рассматривается?

Ну автор подразумевает, что IDE должна автозаменять пробелы на табы.
Табы на пробелы ;)
и «туда» и «туда» многие умеют
При этом все как то забывают упомянуть про удаление 4-х пробелов. Нет, нет. Я знаю про Shift+Tab, которая удаляет 4 пробела с начала строки, но если надо внутри строки, то это жесть… Честно, я пробовал перелезать на табы т.к. ZendStandart и даже перевёл весь проект на пробелы, что бы сжечь мосты. Но больше недели я не выдержил. Например:

@param $someVeryVeryManyVeryLongVariable Description
@param $var Desc

Если придётся удалить первую строку и потом захочется поправить вторую, то лучше смерть. Мало того, что придётся насиловать свой бэксспейс, так ведь ещё в голове придётся отсчитывать число кратное четырём!
компилятор сожрал пробелы. Там конечно Description находятся на одном уровня.
в нормальных редакторах Shift+Tab удаляет из любого места до позиции, кратной текущему табсайзу.

то, что вы говорите про «удаляет 4 пробела с начала строки» — это smart backspace
Можно без насилия — большинство IDE понимают Ctrl+Del, Ctrl+Backspace.
ну и зачем мне жать еще и Ctrl? одной клавишей значительно удобнее уродовать чем несколькими
орудовать :)
В данном случае надо использовать пробелы в любом случае, иначе при изменении размера таба всё поплывёт. Так что пример неудачный.
Внутри строки поможет блочное выделение — при нём таб/шифт-таб работают от его позиции, а не от начала строки. Как минимум, так сделано в Delphi и это хорошо.
Нет, если внимательно читать статью, то можно увидеть, что IDE настраиваются на вставку пробелов при нажатии табуляции(так под дефолту в PhpStorm'е).
You should set your editor to emit spaces when you hit the tab key.
Ага, какие то дурацкие причины пользовать табы автор учел, а собственно главную о том, что нажать один раз tab значительно быстрее, чем два раза пробел…

Да и вообще по моему таких проблем у людей которые пользуют современные ide уже давно не возникает (или бывает?)
По-моему, во мноих средах настраивается поведение нажатия — вставлять пробелы или табуляцию (в частности, Visual Studio)
В любой среде легко и просто настраивается, чтобы вместо TAB вставлялось нужное количество пробелов.
но есть еще обратная операция — backspace и delete, и там уже нужно жмякать по 2-4 раза.
Shift+Tab — обратная операция почти везде.
backspace — удобнее, не надо пальцы выворачивать
Shift+Alt+← — в NetBeans сдвигает блок кода на ширину табуляции влево (Shift+Alt+→ соответственно вправо). Нажимать backspace / del дольше. И вообще, спор на два топика мне кажется уже немного глупым, так как в IDE можно настроить стандарт форматирования кода и одним хот-кеем приводить код к своему стилю. А там уже все-равно, что было в коде раньше — табы или пробелы, переносились фигурные скобки на следующую строку или нет и т.п.
а если делаем в команде через систему контроля версий, и программист А любит табы, а программист Б любит пробелы?
уволить того который не следует общему стилю
Вроде почти везде бэкспэйс настраивается на удаление до табуляции в положении умного начала строки. Так что нужно только один бэкспэйс жать.
Конечно, удобнее. И в нормальных редакторах это тоже настраивается: Backspace делает именно unindent, удаляя нужное количество пробелов ;)

P.S.: сам я использую тот подход, который вы описали в топике-ответе: табы для отступов и пробелы для выравнивания.
Я не знал, что это сочетание работает с пробелами. Но все таки варианты остаются, тот же del ;)
в том же vim'е не нужно «жмякать» 2-4 раза, он сам прекрасно понимает где у тебя отступы.
То есть он превосходно эмулирует вам табы? :) Честно, я не хочу участвовать в этом споре. Я выбрал для языка C# для себя табы. Даже перевел команду на них, объяснив и доказав что это удобнее, особенно при использовании Visual Studio. Так мне хочется, так мне удобнее.

От статьи я честно ожидал что-то действительно революционное. А здесь же опять вырваны какие-то моменты, с которыми столкнулся автор, и которые считает автор важными. Еще один пласт для холивара.
не верно, он превосходно мне эмулирует 4 пробела. Ширина таба — величина не постоянная, четыре пробела всегда остаются четырмя пробелами. В каком бы редакторе я бы не открыл свой код — он будет выглядеть так, как выглядел в моем редакторе.
Нет, не будет.
Если у вас будет alignment в коде (выравнивание инициализации) при помощи пробелов, то открыв в каком-нибудь редакторе, у которого не моноширинный шрифт — вы так же увидите все разъехавшимся.
вы часто любуетесь своим кодом в каком-нибудь Word'e?
Я ни разу не сталкивался с человеком, который бы что-нибудь криво выровнял из-за того, что у него другая длина таба.
А вам случалось хоть раз такое делать?
Сложно вспомнить.
умные редакторы умеют стирать по [tab_size] пробелов за раз, там где это нужно.
Komodo Edit корректно отрабатывает backspace при табуляции пробелами, удаляя ровно столько пробелов, сколько использовано для отступа.
А Ctrl+Backspace не помогает? Или потрётся и идущее перед пробелами слово?
потрется
Знак табуляции — 1 байт, пробел — нужное кол-во пробелов × 1 байт
Экономия места ну очень важна. Был у нас на работе такой экономщик, экономил байты на всем, создавал id размером в 2 байта, аргументируя «когда будет кончатся — увеличим» и его не смущало огромное количество внешних ключей на такие id.
Я не говорил, что нужно экономить на id и прочем. Например в HTML, CSS и Javascript это напрямую влияет на скорость загрузки страниц.
Для этого в продакшн нужно выпускать обфусцированные версии скриптов и не забывать включать сжатие на веб-сервере
> Например в HTML, CSS и Javascript это напрямую влияет на скорость загрузки страниц.
На скорость больше влияет сжатие, а при использовании сжатия количество пробелов не сильно влияет на размер. Тем более, что скрипты желательно минимизировать(minify) на продакшне, а при минимизации все пробелы и табы удаляются, и переносы строк вместе с ними.
с HTML и CSS можно провести аналогичную минимизацию, только для свободного места :)
А еще можно для экономии места вообще не делать никакого форматирования текста и не писать комментариев.
\t — анахронизъм
Предположим, в одной библиотеке табуляция равна 3 символам, в другой 4 символам.

Что-то меня это немного смутило. Что здесь подразумевается? Таб — это символ \t, как он может иметь размер? Как это библиотека будет иметь свой размер табуляции?

Вообще, если уйти в историю, то как раз таки пробелы использовались из-за исторических проблем ;) Табы то это, наоборот, новье. Разве нет?
Теоретически, табы это красиво. Практически, табы это геморрой. Только многие до сих пор это понять не могут.

По поводу библиотек. Я имел в виду, что одной библиотеке заголовочные файлы и т.д. оформлены из расчета, что длинна табуляции составляет X пробелов. В другой — Y пробелов. В результате тошнит, когда смотришь на разъехавшиеся заголовочные файлы там, где расчетная длинна табуляции не совпала с установленной у меня в редакторе. Были бы пробелы. Было всё ровно.
Честно говоря не понимаю вас в этом вопросе. Тоже самое можно сказать и про пробелы. Кто-то как-то красиво оформил код пробелами (как я понимаю, это, например, вариант инициализации по одной линии вами приведенный), но в разных IDE используется разный шрифт, и тогда опять же все разъедится. То есть проблемы то одинаковые. Разве нет? Все зависит, наверное, от рук мастера?
НЛО прилетело и опубликовало эту надпись здесь
Во всех используемых мной IDE используется моноширинный шрифт, хотя никто не мешает изгадить пользователю свой IDE Comic Sans'ом)
Да, но никто не мешает вам открыть код в notepad, wordpad, editplus, notepad++ или еще хз где, ведь так? :)
Я же говорю, тут важна рука мастера.
Просто сама проблема надуманна. Меня вот бесят «египетские скобки», но в эклипсе все мои противоречия устраняются по CTRL+SHIFT+F. Каждый пишет код как ему удобно его читать, а нормальные IDE позволяют удобно читать его всем)
Я полностью вас поддерживаю. Проблема надуманная, как в случае с табами, так и с пробелами. Автору попался какой-то мудак, который как-то грамотно выравнивал там что-то табами. В другой момент может перейти дорогу другой мудак, который уже как-то по хитрому будет что-то выравнивать пробелами под comic sans.
Вы будете смеяться, но в каком-то из редакторов (кажется, notepad++) раньше комментарии по умолчанию отображались именно комиком, да еще с размером меньше, чем у остального кода. :) Слава богу, потом догадались убрать.
Если шрифт моноширинный (а как можно работать с кодом, используя пропорциональные шрифты, я не представляю), то я не вижу причин чему-либо разъехаться.
В вашем предложении стоит «если». Я поясню:
«Если табы использовать правильно, то я не вижу проблем.»
«Если пробелы использовать правильно, то я не вижу проблем.»
Думаю, что на этом можно закончить дискуссию?
Вы видели людей которые реально работают? не правят чтото по быстрому первым попавшемся редактором потому что поправить надо срочно а под рукой ничего нет, а именно реально работают. Я нет. А вот людей с разной длиной табуляции полно.
А вот людей с разной длиной табуляции полно.

Пускай, а чем они нам мешают? Примером с alignment? Пускай не делают так.
Отлично работаю с кодом, используя немоноширинные шрифты уже больше года. Не понимаю почему я этого не сделал раньше.
Ну-ка, ну-ка, посоветуй фонтов, сто лет мечтаю попробовать! :)

Хочу спробовать тоже, ага. :)
У меня MS-овский стандартный calibri стоит. Все хочу поискать что-нибудь более кодо-ориентированное, да руки не доходят.
У меня его нет. :-/

Сижу на consolas и что-то с засечками для комментариев — сразу выделяются.
А скрин можно?)
>Теоретически, табы это красиво. Практически, табы это геморрой. Только многие до сих пор это понять не могут.

Табы — это красиво и теоретически, и практически. Вот только многие до сих пор не могут понять разницу между отступом и выравниванием ;)
Меняйте ширину таба как хотите: хоть в 2 символа поставьте, хоть в 8 — форматирование никуда не поедет:



Геморрой не в табах, а в неумении ими пользоваться.
А пробелы для выравнивания вы как набираете? Tab'ом или пробелом?
Пробелом :( Но я согласен добровольно делать это руками, т.к. код читается намного чаще, чем пишется.

QScintilla, насколько мне известно, пока не научилась «умно» определять, отступ это или нет, и вести себя соответствующим образом.
Хм, в принципе это можно реализовать ручками, на уровне редактора. Спасибо за толчок в нужном направлении, я подумаю над этим :)
Реализовать вырывание по табу можно, но на уровне редактора… Что делать с исходниками, которые случайно открыли с другим стилем форматирования?

Извините.
Какими бы ни были настройки редактора — всегда найдётся такой файл, в котором будет другой стиль форматирования :)
Подумаю на досуге, как сделать это правильно…
Все правильно! Табы они для отступов (те что в начале строки).
В копилку доводов

1) «нажать один раз таб проще чем каждый раз отсчитывать нужное количество пробелов»
— многие среды разработки умеют автоматически заменять таб на пробел

2) «в случае с табомизменение пары символов не приводит к тому что надо менять форматирование
Важно не использование табуляции или пробелов, а постоянство. В своих новых проектах используйте то, что вам больше нравится. Во всех остальных придерживайтесь уже сложившегося стиля написания кода. А утверждение, что табуляция лучше пробелов — обычный холивор.
Вы не прочитали статью. :( Ну причем здесь постоянство?
эх, мне бы ваши проблемы.
На сколько я знаю, символ табуляции для выравнивания и придуман
из википедии:
Горизонтальная табуляция (HT, TAB) — символ таблицы ASCII с кодом 09h, используется для выравнивания текста по горизонтали.

дак зачем для этого использовать пробелы? Мне не понятно.
Вы когда ни будь код оформляли? :)
НЛО прилетело и опубликовало эту надпись здесь
О… Aptana иногда такое волшебство с кодом делает при автоматическом форматировании.
Вообще, он сделан не для такого выранивания. Идея таба же в том, чтобы из двух колонок текста можно было выровнять вторую вне зависимости от содержимого первой(до момента переполнения). С пробелами при каждом изменении первой призодится редактировать и отступ, с табами — нет.
Но сейчас даже это уже малоактуально, потому как во-первых, строки стандартизированнной длины используются реже, все часто перескакивает на следуюзий табпоз, во--вторых, везде ГУИ, в-третьих, в консоли есть `column`.

А в коде колонки — сравнительно редкое дело, и там, где они есть — они как правило пишутся раз и надолго. (Вообще, может я что-то позабыл, но реальные колонки вроде используют только в наборах констант, либо инициализациях крупными пачками, для этих случаев — верно.)
На дворе канун 2012 года, экономический кризис, мир стоит на пороге экологического коллапса. Населению не хватает питьевой воды и пищи. Постоянно возникают новые эпидемии и до сих пор не научились лечить вирусные заболевания. Но самое страшное не в этом. Самое ужасное заключается в том, что некоторые программисты неправильно используют табы и спэйсы.
Что ещё страшней, другие вместо того, чтобы пойти решать эти проблемы, сидят и читают на хабре про всякие глупости. :)
Вот только никто так не делает. Походите по своему коду и вы уведете что-то более реалистичное (один таб = 2 пробела):

  A=Aaaaaaaaaaaa &&
    Bbbbbbbbb;

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

    A=Aaaaaaaaaaaa &&
        Bbbbbbbbb;


Феерическая чушь. Это делается не ради какой-то мнимой красоты, а чтобы было четко видно вложенность конструкций и повышалась читабельность кода. И если мне для комфортного чтения кода необходимо 4 пробела, то я ни за какие коврижки не стану жать 4 раза пробел, когда можно один раз нажать на таб.
ППЦ! А Я ТО ДУМАЮ, ПОЧЕМУ МЕНЯ МИНУСУЮТ!!!
А тут оказывается сборище ламеров.
Не знаете о чем речь, хоть бы не позорились! Кошмар!
Пойду текст поправлю в статье. Напишу, что 4 раза жать пробел не обязательно!

Прощайте.
Не увиливайте от ответа на вопрос, сколько раз надо нажимать backspace :)
в vim — один раз
А в Kate, Notepad, nano или чем-то другом, что оказалось под рукой и надо быстренько поправить код? ;)
ни разу с таким не сталкивался. Раз. Везде где используется код, есть ssh+vim. Два. Что мешает поставить vim?
Я не умею пользоваться Вим ;)
Скажите мне, пожалуйста, сколько раз вы нажмете таб и сколько раз пробел для форматирования подобного мизерного куска кода: farm6.static.flickr.com/5224/5661319418_52effa8a3e_b.jpg?

Я так понимаю те, кто использует табы всегда беспощадно жмет пробел по 30 раз для алиджмента, так? Мне достаточно пары нажатий на таб как для алиджмента, так и для индентации и код всегда и везде будет выглядеть красиво, так как все это — пробелы.
Когда вы первой строкой вводите wcex.cbSize 10 пробелов перед '=' отбиваются автоматом или ручками?
3-мя нажатиями на таб. А между `wcexBackground` и `=` — нужен всего 1 таб. Получается такое же лаконичное выравнивание + я нажимаю клавишу в 3 раза меньше, чем если бы долбил по пробелу.
НЛО прилетело и опубликовало эту надпись здесь
Вот, кстати, с Kate никаких проблем. Умеет, если научить один раз.

Просто автор статьи имеет лютую, бешеную и абсолютно личную ненависть к табам. Вся аргументация в этом случае будет вторичной по отношению к ненависти :) В принципе, вполне можно понять.

На всякий случай уточню — тоже терпеть не могу. Наша команда сейчас во всех разработках использует два пробела. IDE разные: vim, emacs, IDEA, IBM Rational Developer, Qt Creator, Kate… Короче, кто во что горазд. Пока никто не жаловался :)
Столько же сколько и tab если мы говорил о нормальном редакторе (VIM например).
ППЦ! А Я ТО ДУМАЮ, ПОЧЕМУ МЕНЯ МИНУСУЮТ!!!

Минусуют потому что пишете глупости не разобравшись
Ага. 10 лет всё никак разобартсья немогу. :)
Очевидно, да)
НЛО прилетело и опубликовало эту надпись здесь
Длительность — не показатель. Если не хотеть разбираться, то можно и за 20 лет не разобраться.

P.S.: в каком классе учат про "«не» с глаголами пишется раздельно"? Вот и скажите, сколько уже лет прошло — а вы до сих пор не разобрались с этим ;)
Хм. Все-таки, мы с вами каждый прав не более, чем на половину. Вон TheShock отлично объяснил разницу между indentation и alignment.
Тем, кто использует табы внутри кода, нужно отрывать руки. А ля отступов они — самое то
НЛО прилетело и опубликовало эту надпись здесь
В качестве продолжения беседы: А исходники в фаре смотреть — это нормально что ли? Да и стандарт форматирования который так сильно зависит от пробелов/табов не кажется очень удобным. Мало того, некоторые даже пропорциональные шрифты в своей дев.среде используют — там пробелы просто противопоказаны.
за пропорциональные шрифты в редакторах кода нужно сразу четвертовать!
Они-то кому мешают???
А разве нет?


Вот только никто так не делает. Походите по своему коду и вы уведете что-то более реалистичное (один таб = 2 пробела):

A=Aaaaaaaaaaaa &&
Bbbbbbbbb;

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

A=Aaaaaaaaaaaa &&
Bbbbbbbbb;


Про вариант с 4 пробелами:
A = Aaaaaaaaaaaa &&
Bbbbbbbbb;

Но, по-моему, читабельность, в данном случае, рассматривается еще и на уровне операций:
A = Aaaaaaaaaaaa
&& Bbbbbbbbb
&& Ccccccccc;
D'oh! Отступы съелись.
Используйте конструкцию <source></source> для оформления кода на Хабрахабре и кнопку «предпросмотр» для предварительной оценки результатов оформления перед публикацией.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
И кстати, какой смысл в таком форматировании?

A=Aaaaaaaaaaaa &&
    Bbbbbbbbb;


Почему в одну строку не написать?

A=Aaaaaaaaaaaa && Bbbbbbbbb;


По той же самой причине по которой делается все форматирование. Чтобы повысить читаемость кода.



читается проще чем

OpenUSART ( USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_LOW, 64);
В таком случае, если использовать табы, то:
1. Tab'им до уровня OpenUSART
2. Пробел'им от OpenUSART до нужного места под солнцем
Проследите ветку комментариев. Я не говорил что такое форматирование надо делать только табами или только пробелами. Я привел пример для crea7or когда возникает необходимость в многострочном оформлении одной комманды.
OpenUSART (
    USART_TX_INT_OFF  &
    USART_RX_INT_ON   &
    USART_ASYNCH_MODE &
    USART_EIGHT_BIT   &
    USART_CONT_RX     &
    USART_BRGH_LOW
    , 64
);
это как бы пример же.
длинные if'ы с кучей условий не всегда влезают в 80 символов.
А где такой лимит в 80 символов?
во многих стандартах кодирования :)
например у гугла
Вот бы знать зачем… Неужели для работы через терминал?
Вообще да. Стандартный терминал имеет разрешение 80x25 символов.
В гугле объясняют свои предпосылки.
С этим правилом, как я понял, ситуация такая, что хотят сохранить однородность кода, ибо уже много написанного, который следует этому правилу.
А вообще вместо 80 можно подставить своё, суть не поменяется, кроме того что лимит должен быть обязательно, ибо не у всех 22"-30" мониторы.
Дело не только терминале и точно не в мониторе. Просто, длинные строчки плохо читаются.
Очевидно же: image
Мне кажется, мы все здесь не о том говорим. Для каждого языка есть свои рекомендации по форматированию кода. Например, для python'а есть замечательный PEP8, в котором английским по белому написано:
Use 4 spaces per indentation level. …

…The most popular way of indenting Python is with spaces only.
У питона весь код на отступах строиться, по этому для него это нормально.
тут дело не только в отступах, тут дело в стандарте — он один-единственный, и на него все равняются.
Для других языков все печальнее — нет единого стандарта.
пересел на двойной пробел после того, как стал использовать HAML
Табы или пробелы — это творческий вопрос. Тонны кода, написанные с разными отступами, не исправить. Смирение, спокойствие и понимание — вот дзен программиста. В конце концов, не табом единым код хорош или плох.
почему не исправить?
замена регексом по всему проекту — " {4}" на \t, делов то…
Все так, если вы правите свои исходники. Автору же не нравится читать код чужих библиотек, — и тут могут быть варианты.
Нельзя, сломается выравнивание, нужны «умные табы»
а в чем подвох? если код корректно отформатирован под 4 пробела, то все работает отлично, сто раз так делал…
Подвох вот в этом. Если слепо заменить 4 пробела на таб, то потом при изменении ширины таба поедет выравнивание.
Вот про бородатость этого я и говорил. ;)
Google C++ Style Guide:

Use only spaces, and indent 2 spaces at a time.
We use spaces for indentation. Do not use tabs in your code. You should set your editor to emit spaces when you hit the tab key.
Все едят рис, но я вам говорю, это неправильно, макароны гораздо лучше!
Кажется я начинаю понимать, откуда такое моё несогласие с миром. Я в основном работал и работаю с унаследованным кодом. И мне совершенно не интересны теоретические и идеологические обоснования почему табы лучше. Я практик. Когда я беру код и вижу, что он разъехался, так по мне пробелы в 100 раз лучше. Никто никогда не заворачивается, что такое indentation, alignment. Просто 5-10 лет назад натабили и пошли дальше.
Знаете мне сильно хочется посмотреть на такой код где использование табов вместо пробелов настолько ухудшает читаемость. Ну и да, обычно когда используются табы подразумевается что их длина равна 4 пробелам. Есть конечно сумрачные гении которые ставят отличное от 4 пробелов, но это бывает редко.
Эхх. Молодежжж… :)) 2, 3, 4, 8… чего только не насмотришься.
я даже 6 видел, в древнем коде на С
2,4,8 — наиболее часто используемые. В 3 не видел не разу, и честно говоря не думаю что использования таба размерностью 4 вместо 3 сильно ухудшает читаемость кода. Ну и как бы вопрос остается открытым. Покажите код который плохо читается из-за того что там табы а не пробелы.
Пример, может и не самый показательный, просто то что первое под руку попалось. Смысл в том, что оформление кода прыгает в зависимости от размера пробела. И если tab у меня в редакторе не равен 4 пробелам, как задумывал автор, то у меня он будет смотреться плохо.


бывают и другие среды для разработки и другие языки программирования. Где выравнивание, как в центральном примере не так уж и важно. Сама IDE подскажет где какая скобка, и где начинаются и заканчиваются перечисления параметров. Более того этот код еще и замечательно рефакторится для того, чтобы упростить список параметров (можно вынести локальные переменные).
вот знаете пример точно не сильно удачный. Обычно если надо чтобы переменные не плавали, их всех в единый блок выделяют тогда они плавать будут меньше. Да и то сильно это явно не мешает.
Тем, кто использует табы внутри кода, надо отрывать руки. А так, ничего плохого в табах нет.

Они плохи только в языках с significant whitespace типа Питона
Ооо, венгерская нотация… *открываем ещё один holy war*
И вы призываете думать прогрессивно, отказаться от своих привычек и ставить пробелы потому, что так вам будет легче читать код, написанный 10 лет назад? Ну где же логика?

Почему не призывать писать новый код правильно, с indentation и alignment? Почему вы призываете всех вернуться на 10 лет назад?
Андрей, если ты практик, то достаточно было показать что проблема решаема и предложить свой вариант решения. Вступать в мировоззренческие споры и устраивать Священные Войны совершенно не обязательно.
Видимо будет еще одна статья… Вот только с ADD 2011 приеду… :)

Да, кто хочет продолжить дискуссию, может найти меня там. Обсудим всё за пивом.
See ya!
Лучше не надо, вы не поняли смысл моей статьи-ответа.
Я TAB нажимать не отговариваю. :) Нажимайте. Толкьо пусть он вставляет пробелы. Или сколько Вам там нравится. )
НЛО прилетело и опубликовало эту надпись здесь
1. «никто не заглядывает в историю глубже одной-двух ревизий файла» — мне давно уже не было так весело! Спасибо.
2. Правильно использовать не пробелы и не табуляции!!! Правильно поступать так, как требует coding style Вашего предприятия. ТОЧКА.
НЛО прилетело и опубликовало эту надпись здесь
для вас нет, но как только этот код откроет другой человек с другим размером табов — код поедет.
вы точно прочитали статью? там же всё толково объяснено.
Если не использовать alignment, то ничего страшного не случится.
НЛО прилетело и опубликовало эту надпись здесь
>Во всех редакторах есть возможность настроить, сколько пробелов вставлять при нажатии таба.

Ложь.
А это не редакторы. :)
К сожалению, не всегда есть выбор…
Ребята, давайте я вас всех помирю :-). Andrey2008 разрабатывает анализатор кода PVS-Studio и вынужден просматривать большое количество сторонних исходников. И поэтому табы его затра… затрагивают его душу. Но и TheShock привел разумные аргументы. Просто это про две разных ситуации. Да и не знает большинство людей про отличие в отступах и выравниваниях.
Большинство людей не знает про различия отступов и выравнивания → надо пропагандировать использование пробелов?
Большинство людей не знает про различия отступов и выравнивания → надо пропагандировать различия отступов и выравнивания!

Я вот даже не задумывался, но после одного примера от TheShock все понял и теперь буду использовать пробелы там, где нужно. Спасибо ему.
Я надеялся, что хоть этот пост обойдётся без упоминания PVS-Studio :)
Ага, щаз. Коммент (для верности) ещё и продублирован (с точностью до символа) в соседнем топике %)
Проблема исчезнет, когда все разработчики IDE и текстовых редакторов сделают пробелы по умолчанию вместо табов. Большинство не заморачивается по этому поводу
Еще один аргумент в пользу пробелов. Не мой. В icq знакомый прислал. Чтоб не дублировать — ссылка.
Если кто будет собирать статистику — я за пробелы, а от табов блюю. Да и в руби–рельсо–сообществе так принято, кстати. Давно не видел ничего на руби с табами.
Кто-то об этом думает вообще? Ну, кроме автора, конечно.
Я думаю, например.

Я и об одном-то пробеле думаю, а тут их от двух до четырёх (а не то и восьми)!
Конечно. Каждую субботу, выходя вечером во дворик, раскуривая сигару и устраиваясь в кресле, я думаю о том, использовать ли мне табы или пробелы…
в vim
:set et
:retab

и табуляции нету…
а форматированием пускай занимается autoindent, и пара "<" ">"

а будет статья за чистоту trailing spaces? а то я за!
match WhitespaceEOL /\s\+$/
Теоретический вопрос — vim сможет по одному клику (после всяких плагинов наверное — меня что в виме бесит, что из коробки он на иде не тянет) перевернуть исходник где отступ проблемами 4 в исходник где 2 пробелами.
vim и клики как-то не совсем подходящие слова, но и это можно без плагинов. например,
:set noet|retab!|set ts=2|set et|retab!
и дальше можно мапить хоть в хоткей, а хоть и в клик на тулбаре/меню.
Чисто формально вижу в вашем выражении недочёт — нигде не указан размер исходного tab пробелами — 4. Тем более только внутри парсинга синтаксических конструкций, а не литералов внутри…

Сорри нет времени выводить конструкции… Заранее прошу извинить за неправоту…
Пользователи Notepad++, подскажите какие эвенты биндить, чтобы удалять определенное кол-во пробелов, и чтобы блоки двигать левее-правее.

Питонисты с моими этими табуляторами смотрят на меня как на говно, а единственное, что неудобно — отсутствие хоткеев. :-/
>Предположим, в одной библиотеке табуляция равна 3 символам, в другой 4 символам.
> А вы в проекте используете 2 символа.


UPDATE:

ПРИМЕЧАНИЕ ДЛЯ ТЕХ, КТО В ТАНКЕ

Чтобы использовать для оформления пробелы, вовсе не обязательно 4 или более раз нажимать клавишу пробел. Во всех редакторах есть возможность настроить, сколько пробелов вставлять при нажатии таба.


Для танкистов же: количество пробелов в табе позволяет задавать подавляющее большинство редакторов.
Прочитал аргументы. Не убедительно.
Абсолютно согласен с автором. Использую табы только для простого текста (не машиноширный шрифт), в коде — только пробелы!
А ещё меня умиляют сторонники alignment — да, код выглядит красивее, при больших затратах времени на напиние кода. Но после мало-мальского рефакторинга с переименованием переменных всё ломается к чертям и надо тратить время на то чтобы вернуть красоту.
Мой выбор отступы табами и никакого выравнивания строк.
Код читается много чаще, чем пишется. Поэтому это стоит того.
Чтобы использовать табы, необходима одинаковая настройка их размета во всех местах, где показывается код. Таких мест у меня, например, достаточно много: emacs, vim, less, grep/awk/sed, к тому же, сейчас очень популярны сервисы типа гитхаба, где код смотрят в браузере, да и различные пастебины никто не отменял. Меня парит следить, чтобы табы везде были одинаковыми, я их не использую. А пробел — он вбезде пробел, везде имеет одинаковый размер. В емаксе, где я пишу код 99% времени, я просто настроил, чтобы вместо табуляции забивалось 2 пробела, а код выравнивается емаксом сам. В общем, я ни разу и нигде не видел кода с табуляцией и одновременно неразъехавшимся выравниванием, а с пробелами этой проблемы не существует.
Зачем одинаковая? Тоже статью не читали?
НЛО прилетело и опубликовало эту надпись здесь
Я очень серьезен. И, да, я фаром пользуюсь иногда для просмотра файлов.

А вот вопрос компетенции, я бы не стал на Вашем месте затрагивать.
НЛО прилетело и опубликовало эту надпись здесь
Зачем же лук. Для начала попробуйте написать статью. А потом мы обсудим её. А пока, могу предложить свои. :)
В фаре часто приходится просматривать исходные файлы. Часто именно в фаре и заметны все проблемы с форматированием из-за использования табуляций.
Скорее всего повторюсь (все комменты не осилил).
Сам использую пробелы, но по сути они у меня используются как табы, т.е. tab = 4 smart пробела (т.е. до 4, 8, 12 и т.д. символа от начала строки), del = smart удаление пробелов до кратного 4ём символа от начала строки.
Не могу чётко сформулировать причину использования пробелов, но так сложилось исторически. Возможно, когда-то мне часто попадался код с разными «символами отступов» и разной длиной «отсутпов» в одном файле и это раздражало.

Основная часть работы делается в vim'е, но иногда приходится работать и в eclipse, так в нём почему-то tab'ы работают немного по-своему — при выравнивании нескольких строк eclipse иногда ставит пробелы, а иногда табы, по del'у удаляет по одному пробелу… В общем, в eclipse пробелы использовать мне неудобно.

Но сказать-то я хотел по теме.
Всё описание и критика аргументов у автора основывается только на частом лазании в чужом коде при условии, что в один код сунули нос несколько разработчиков, что каждый разработчик, творя этот код :), использует в обязательном порядке разную длину табов, плюс обязательно некоторые используют пробелы. Так проблема-то тут не столько в табах/пробелах, сколько в тех кодерах, которые не соблюли изначальный стиль написания и полезли «в чужой монастырь со своим уставом», так что в неудобстве пользования надо винить именно их.
А вообще правильным подходом, имхо, будет:
— если код тебе перешёл насовсем, то при наличии большого желания и времени, просто сразу перевести форматирование в свой стиль, а не плеваться каждый раз
— если просто пришлось правки вносить в чужой код, но им заниматься будут и другие, либо нет времени/желания на переформатирования, то кодить в том же стиле, что уже используется в скрипте

На самом деле многие почему-то не задумываются о соблюдении общего стиля, либо специально пишут так, чтобы был виден их «вклад».
И да, забыл написать.
Использую пробелы в наших проектах и знаю, что у коллег примерно так же настроены редакторы, так что проблем с таким форматированием у них нет.
При этом я нисколько не презираю табы. Когда попадается скрипт с табами, то в vim'е замена табов пробелами отменяется простым ':se noet' и вношу правки без малейших неудобств.

Но всё же добавлю в преимущества табов. Как и написано в топике каждый предпочитает свою длину отступов, и это касается так же и тех, кто использует пробелы. Если с табами ещё можно добиться несильно разъехавшегося форматирования настроив свою длину отступа (мы говорим именно об indentation), то с пробелами это сделать уже не получится, особенно если в одном скрипте кто-то использовал три пробела вместо таба, а кто-то пять/восемь (попадались и такие). И когда в этот скрипт надо внести небольшие изменения и на переформатирование нет ни времени ни желания, вот тогда от пробелов-отсутпов приходится поплеваться…
Astyle очень удобная утилита. А по поводу того, чем код «украшен», а какая рзница вообще? На вкус и цвет все фламастеры разные.
Проблема просто высосана из пальца.
И похоже исключительно для того, чтобы что-то этакое написать на Хабре.
Проблема на самом деле почти серьезная, если приходится работать с большим количеством кода с источников, которым вы свои стандарты навязать не можете, а ваша IDE сама корректно сформатировать код под ваши требования не может.
Проверьте, пожалуйста, текст топика на предмет наличия орфографических и пунктуационных ошибок. Вот некоторые, что бросились в глаза при спешном прочтении:

«Походите по своему коду и вы уведете что-то более реалистичное» (правильно: «увидите»)

«где используются библиотеки, содержащие в тесте табуляции.» (думаю, вы хотели написать «тексте»)

«Часто причем это подкрепляется каким-либо» («причем» должно быть выделено запятыми).

Спасибо. И извините, если я сам где-то не верно исправил)
НЛО прилетело и опубликовало эту надпись здесь
Формально тоже всё верно. Но, пожалуй, это слишком мрачная картина. Так ли уж часто вам приходится исследовать историю файла на большую глубину? Обычно никто не заглядывает в историю глубже одной-двух ревизий файла. Замена табуляции на пробелы делается глобально и один раз и не должна мешать дальнейшим сравнениям.


Работаю в поддержке старого проекта. Пару раз приходилось заглядывать в код, написанный два года назад. После проведенного реформатирования табов на пробелы поиски нужного места отнимают львиную долю времени, скажу я вам. А если нужно получить полный diff… попробуйте сами, а потом уже проводите подобные рефакторинги.
А в остальном согласен, табы сам уже давно не использую (естественно это не про клавишу Tab).
Вообще то недостаток пробелов — единственный, не считая конечно же смехотворного аргумента, что исходные файлы с пробелами занимают больше места.))

Он заключается в том, что невозможно настроить отображение текста для конкретного разработчика.

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

Однако есть очень важное и единственное преимущество пробелов перед табуляцией, возникающее при оформлении многострочных операторов. Многострочные конструкции принято форматировать по ширине.
Например:

int someFunction(const int         _in1,
                 const int         _in2,
                 const CObject&    _in3,
                 const CObjectDer& _in4,
                 CObject&          _out1,
                 CObjectDer&       _out2,
                 CObject&          _out3);

ширина табуляции — 4 пробела, при этом используются пробелы вместо символов Tab

При этом вы же не будете отрицать что для отображения исходного кода используются моноширинные шрифты, то есть шрифты с постоянной шириной (иначе в разных IDE творился бы полный ад независящий от использования пробелов или табуляций)

Представляете, как выглядел бы приведенный выше код, если бы он был оформлен табуляциями (+пробелами, без них всё равно никуда) с отличными от первоначальных настроек табуляции?

int someFunction(const int< <  _in1,
< < < <  const int< <  _in2,
< < < <  const CObject&< _in3,
< < < <  const CObjectDer& _in4,
< < < <  CObject&< <   _out1,
< < < <  CObjectDer& _out2,
< < < <  CObject&< <   _out3);

(1 табуляция — 2 пробела против 4-ех)

Аргументы поехали и уже не представлены в виде красивого столбика.

а если табуляцию увеличить?
Например 8 пробелов на таб?

int someFunction(const int<       <        _in1,
<       <       <       <        const int<       <        _in2,
<       <       <       <        const CObject&<       _in3,
<       <       <       <        const CObjectDer& _in4,
<       <       <       <        CObject&<       <         _out1,
<       <       <       <        CObjectDer& _out2,
<       <       <       <        CObject&<       <         _out3);


Аргументы уезжают за правую сторону редактора.
Мало этого — еще и нихрена непонятно.
Зачем такая радость?

Итого:
Единственный вменяемый способ оформления своих исходников для просмотра разными редакторами — это использование исключительно пробелов вместо табов.

P.S.
Для тех кто в танке:
Необязательно жмакать 2/4/6/8 раз клавишу пробела для оформления отступа, достаточно настроить свой редактор на выставление пробелов при нажатии на клавишу Tab.

Например в VS он настраивается так:
TOOLS->Options...->Text Editor->C++->Tabs->Insert Spaces
Зарегистрируйтесь на Хабре, чтобы оставить комментарий