Pull to refresh

Comments 217

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

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

Ну автор подразумевает, что 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 можно провести аналогичную минимизацию, только для свободного места :)
А еще можно для экономии места вообще не делать никакого форматирования текста и не писать комментариев.
Предположим, в одной библиотеке табуляция равна 3 символам, в другой 4 символам.

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

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

По поводу библиотек. Я имел в виду, что одной библиотеке заголовочные файлы и т.д. оформлены из расчета, что длинна табуляции составляет X пробелов. В другой — Y пробелов. В результате тошнит, когда смотришь на разъехавшиеся заголовочные файлы там, где расчетная длинна табуляции не совпала с установленной у меня в редакторе. Были бы пробелы. Было всё ровно.
Честно говоря не понимаю вас в этом вопросе. Тоже самое можно сказать и про пробелы. Кто-то как-то красиво оформил код пробелами (как я понимаю, это, например, вариант инициализации по одной линии вами приведенный), но в разных IDE используется разный шрифт, и тогда опять же все разъедится. То есть проблемы то одинаковые. Разве нет? Все зависит, наверное, от рук мастера?
UFO just landed and posted this here
Во всех используемых мной 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, используется для выравнивания текста по горизонтали.

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

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

  A=Aaaaaaaaaaaa &&
    Bbbbbbbbb;

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

    A=Aaaaaaaaaaaa &&
        Bbbbbbbbb;


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

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

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

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

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

Минусуют потому что пишете глупости не разобравшись
Ага. 10 лет всё никак разобартсья немогу. :)
UFO just landed and posted this here
Длительность — не показатель. Если не хотеть разбираться, то можно и за 20 лет не разобраться.

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

A=Aaaaaaaaaaaa &&
Bbbbbbbbb;

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

A=Aaaaaaaaaaaa &&
Bbbbbbbbb;


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

Но, по-моему, читабельность, в данном случае, рассматривается еще и на уровне операций:
A = Aaaaaaaaaaaa
&& Bbbbbbbbb
&& Ccccccccc;
Используйте конструкцию <source></source> для оформления кода на Хабрахабре и кнопку «предпросмотр» для предварительной оценки результатов оформления перед публикацией.
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
И кстати, какой смысл в таком форматировании?

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" мониторы.
Дело не только терминале и точно не в мониторе. Просто, длинные строчки плохо читаются.
Мне кажется, мы все здесь не о том говорим. Для каждого языка есть свои рекомендации по форматированию кода. Например, для 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 приеду… :)

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

Ложь.
К сожалению, не всегда есть выбор…
Ребята, давайте я вас всех помирю :-). 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 пробела, а код выравнивается емаксом сам. В общем, я ни разу и нигде не видел кода с табуляцией и одновременно неразъехавшимся выравниванием, а с пробелами этой проблемы не существует.
Зачем одинаковая? Тоже статью не читали?
UFO just landed and posted this here
Я очень серьезен. И, да, я фаром пользуюсь иногда для просмотра файлов.

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

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

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

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

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

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

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

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

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


Работаю в поддержке старого проекта. Пару раз приходилось заглядывать в код, написанный два года назад. После проведенного реформатирования табов на пробелы поиски нужного места отнимают львиную долю времени, скажу я вам. А если нужно получить полный 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
Sign up to leave a comment.