LINUX.ORG.RU

Использовать пробелы для отступов

 , ,


1

1

Ищу хотя бы одну конструктивную причину для сабжа. Именно в плане отступов (indentation), а не выравнивания (alignment).

Навеяло гугловым cpplint.py, который панически засирает вывод предупреждениями о табах на каждую (!) строчку. Что такого ужасного?

Сам пользуюсь табуляцией, но довольно много людей (и проектов) используют пробелы. Вот и заинтересовало - может быть, они действительно чем-то удобнее, только я не знаю? Холивар не нужен, нужна причина. Гугль не нашёл ничего, кроме кидания какашек в сторону табов.

ЗЫ. Про «не смешивать в одном проекте» знаю.

ЗЫЫ. Про whitespace знаю.

UPD: Заодно ищется причина необходимости (незаменимости) табов, если такие есть. Навскидку только Makefile приходит в голову.

UPD: как минимум одна причина найдена:

Dendy

- когда компилятор говорит, мол у тебя ошибка в такой-то колонке, начинается путаница, имелась в виду визуальное или реальное количество символов; проблема легко решается на уровне редакторов кода;

Пробелы есть пробелы, а табы визуально смотрятся везде по-разному.

border-radius ()

у пробела всегда во всех редакторах фиксированная ширина - 1 символ. у таба то 2, то 4, то 8, в зависимости от настроек редактора.

с другой стороны исходник где отступы сделаны табуляциями мне всегда было проще редактировать.

invy ★★★★★ ()

По моему ничего не значащему мнению ТАБы просто экономят время - вместо 3-4х нажатий на пробел можно не задумываясь жмакнуть по TAB.

Юзаю ТАБы.

AlexCones ★★★ ()

отступов (indentation), а не выравнивания (alignment)

А в чем разница? Мне табы удобнее тем, что отображаются у каждого так, как он захочет.

orm-i-auga ★★★★★ ()
Ответ на: комментарий от invy

у пробела всегда во всех редакторах фиксированная ширина - 1 символ. у таба то 2, то 4, то 8, в зависимости от настроек редактора.

Это же главная фича табов - подстроить под себя. Отделение представления от модели.

schizoid ★★★ ()
Ответ на: комментарий от orm-i-auga

А в чем разница?

if ((a == 5) ||
    (b == 6) ||
    (c == 7))
{
   return ERROR_567;
}

Если я правильно понимаю СУТЬ.

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

ТАБы просто экономят время - вместо 3-4х нажатий на пробел можно не задумываясь жмакнуть по TAB.

тех кто форматирует код нажатием на пробел - нужно расстреливать.

Я жму TAB и мой редактор выставляет нужное в данном контексте количество пробелов.

А форматирование табуляциями не нужно, да, как минимум по причине

- меньшей негибкости

- отсутствия стандарта на размер табуляции

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

Это же главная фича табов - подстроить под себя.

один фиг будут случаи, когда вёрстка поедет

lazyklimm ★★★★★ ()

PEP8 так рекомендует, но в принципе профита нет. то же гугл 2 пробелы использует вместо рекомендованных 4. Просто общепринято, редакторы поддерживают замену табуляции на нужное количество пробелов, так что можно особо не париться.

crunchy_crow ()

используй VIM, он сам ставит нужное.

drBatty ★★ ()

Ширину таба можно выставить любую.

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

По моему ничего не значащему мнению ТАБы просто экономят время - вместо 3-4х нажатий на пробел можно не задумываясь жмакнуть по TAB.

ещё один неосилятор IDE. Даже vim сам ставит.

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

Это же главная фича табов - подстроить под себя.

это единственная (причём весьма сомнительная) фича табов

Отделение представления от модели.

нормальные редакторы умеют отделять и так

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

тех кто форматирует код нажатием на пробел - нужно расстреливать.

Аргументы будут? Или только голый фанатизм?

Я жму TAB и мой редактор выставляет нужное в данном контексте количество пробелов.

А я открыл ваш код в своем редакторе и оно «поплыло».

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

А форматирование табуляциями не нужно, да, как минимум по причине
- отсутствия стандарта на размер табуляции

Это основной аргумент за использование табуляции.

- меньшей негибкости

Поподробнее, пожалуйста.

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

Аргументы будут?

- неоптимальность (но эт проблемы индейца)

- зависимость форматирования от пожелания левой пятки этого индейца (вот это самое плохое)

А я открыл ваш код в своем редакторе и оно «поплыло».

как раз отобразится как и было написано. А если твой редактор не умеет нормально делать отступы пробелами - он говно.

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

Я жму TAB и мой редактор выставляет нужное в данном контексте количество пробелов.

А я открыл ваш код в своем редакторе и оно «поплыло».

ты укурился? Как пробелы «поплывут»???

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

Поподробнее, пожалуйста.

тьфу, меньшей гибкости имелось в виду

Красивое выравнивание с переносом (аргументы функций, дополнительные условия, итп) совсем без пробелов невозможны. А мешать табы с пробелами, это, извините - тоже дикий изврат.

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

Откуда пробелы, если он жмет «ТАБ»?

TAB в нормальном редакторе - не символ табуляции, а шорткат для функции индентации

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

а ещё есть такой язык как python

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

schizoid ★★★ ()
Ответ на: комментарий от orm-i-auga

И всё же я не понимаю, зачем разделять эти два понятия. Отступ - это выравнивание по первому символу, выравнивание - это отступ от последнего. Наплодили сущностей. )

orm-i-auga ★★★★★ ()
Ответ на: комментарий от lazyklimm

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

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

Красивое выравнивание с переносом (аргументы функций, дополнительные условия, итп) совсем без пробелов невозможны.

Ещё как возможны.

runSomeFunction(
    arg1,
    getSomeResult(),
    expression && other_expression
);

А теперь говори, почему это некрасиво.

(Хотя делать так всё равно нельзя)

дополнительные условия

А вот за это нужно отрывать руки. Многострочные инструкции вообще зло.

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

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

Поскольку табулицию практически никогда не ставят меньше 2 символов - с табом есть шанс, что поплывёт форматирование

Но я даже не об этом, я о смешивании табов с пробелами (для отступов, ессесна)

lazyklimm ★★★★★ ()
Ответ на: комментарий от schizoid
    // Выравнивание.
    int           a        = 1;
    double        var      = 2.0;
    long long int long_var = 3;

Расстрел. Перлисты очень любят такое, для них нечитаемая хня - хлеб насущный.

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

PEP8

Never mix tabs and spaces.

The most popular way of indenting Python is with spaces only. The second-most popular way is with tabs only. Code indented with a mixture of tabs and spaces should be converted to using spaces exclusively. When invoking the Python command line interpreter with the -t option, it issues warnings about code that illegally mixes tabs and spaces. When using -tt these warnings become errors. These options are highly recommended!

For new projects, spaces-only are strongly recommended over tabs. Most editors have features that make this easy to do.

Где здесь аргументы? «Используй пробелы, потому что я так хочу!»

schizoid ★★★ ()
Ответ на: комментарий от orm-i-auga

И всё же я не понимаю, зачем разделять эти два понятия. Отступ - это выравнивание по первому символу, выравнивание - это отступ от последнего. Наплодили сущностей. )

твой код с табами для отступов у меня не поплывёт, даже если у меня таб не тот. А вот выравнивание - поплывёт, ибо там иначе как мешаниной табов и пробелов не получится.

ИМХО мешать не нужно, а так - пофиг. Кому не пофиг - пусть выкинет свой notepad.exe.

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

А теперь говори, почему это некрасиво.

а единственный аргумент ты тоже пишешь с новой строки?

Не думаю. Дык вот, суть в единстве стиля

runSomeFunction(arg1);
runAnotherFunction(arg1, getSomeResult(),
		   expression && other_expression);
lazyklimm ★★★★★ ()
Ответ на: комментарий от orm-i-auga

И всё же я не понимаю, зачем разделять эти два понятия. Отступ - это выравнивание по первому символу, выравнивание - это отступ от последнего. Наплодили сущностей. )

Отступы дают читабельность и кое-где нужны для синтаксиса, а читабельность выравнивания вообще под сомнением. Аргументы против у Стива Макконнела в «Совершенном коде».

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

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

TAB в нормальном редакторе - не символ табуляции, а шорткат для функции индентации

Ага, только автор прохладной шутки про таб вообще-то противопоставлял <TAB> многократному нажатию на <SPACE>. И где в таком случае

в нормальном редакторе

?

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

Поскольку табулицию практически никогда не ставят меньше 2 символов

WUT? Такой известный проект, как ядро Linuх, ставит табуляцию в 8 пробелов.

я о смешивании табов с пробелами (для отступов, ессесна)

Indent with tabs, align with spaces: http://vim.wikia.com/wiki/Indent_with_tabs,_align_with_spaces

tailgunner ★★★★★ ()
Ответ на: комментарий от lazyklimm
runSomeFunction(arg1);
int result = getSomeResult();
bool finalExpr = expression && other_expression;
runAnotherFunction(arg1, result, finalExpr);

Тоже некрасиво? Нечитабельно?

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

Отделение представления от модели

Нужно пойти еще дальше, и независимо от того, как отформатирован исходный файл, пусть редактор/IDE сразу отображает его так, как привык я, без изменения исходного содержимого. Правда, надо подумать как правильно потом записывать изменения.

orm-i-auga ★★★★★ ()
Ответ на: комментарий от orm-i-auga

Нужно пойти еще дальше, и независимо от того, как отформатирован исходный файл, пусть редактор/IDE сразу отображает его так, как привык я, без изменения исходного содержимого. Правда, надо подумать как правильно потом записывать изменения.

Нужно уметь вовремя остановиться :)

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

табулицию практически никогда не ставят меньше 2 символов

Такой известный проект, как ядро Linuх, ставит табуляцию в 8 пробелов.

/me 5 раз перечитал, пытаясь найти противоречие. Не нашёл :(

Indent with tabs, align with spaces

Using spaces for indentation means that the code will look the same on all systems, even if the tabstop option is changed.

это самое главное же

However, different people like different indent sizes, so a common procedure is to use tabs for indentation so the indent size can easily be adjusted to suit whoever is working on the code.

different people могут пройти лесом, должен быть фиксированный codestyle

тем более, никто не мешает автоматизировать переформатирование при коммите

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