Russian Qt Forum

Программирование => Общий => Тема начата: Авварон от Апрель 21, 2011, 22:56



Название: Пробелы против табов
Отправлено: Авварон от Апрель 21, 2011, 22:56
Сабж. Что вы юзаете и почему. Меня интересует плюсы пробелов (не зря кутешники и вебкитовцы их юзают же?)


Название: Re: Пробелы против табов
Отправлено: zenden от Апрель 21, 2011, 23:11
Плюсы пробелов: код выглядит одинаково у всех, независимо от настроек редактора. Отсутствуют проблемы с выравниваниями. Если работа в команде, надо договариваться о едином размере отступов.

Я юзаю смешанный вариант: табы для уровней вложенности, пробелы для выравниваний.


Название: Re: Пробелы против табов
Отправлено: Blackwanderer от Апрель 22, 2011, 04:01
Единственный но большой плюс, это действительно то, что код выглядит одинаково в любых условиях: если вы перешли на другую IDE, если вы открыли его в блокноте или любом другом текстовом редакторе, при использовании различных утилит системы контроля версий и т.д. и т.п.


Название: Re: Пробелы против табов
Отправлено: Пантер от Апрель 22, 2011, 07:22
Я пользуюсь табами. Исходники меньше весят. :)


Название: Re: Пробелы против табов
Отправлено: Fat-Zer от Апрель 22, 2011, 07:50
Я пользуюсь табами. Исходники меньше весят. :)
3-6 байтов на строку жалко? ну вы и жмот! :D

тоже пользуюсь табами, не знаю почему, но когда вижу отступы пробелами сильно раздражаюсь=)


Название: Re: Пробелы против табов
Отправлено: Igors от Апрель 22, 2011, 08:46
Я долго и "принципиально" использовал пробелы, но в конце концов перешел та табы. Большинство использует  сдвиг 1 таб (после if. { и.т.п.), а главное - пришлось использовать IDE где пробелами, как ни старайся, аккуратно не отравняешь.  Увы, получил массу проблем с переносом между Mac/Windows :'(


Название: Re: Пробелы против табов
Отправлено: Пантер от Апрель 22, 2011, 09:05
Я пользуюсь табами. Исходники меньше весят. :)
3-6 байтов на строку жалко? ну вы и жмот! :D

тоже пользуюсь табами, не знаю почему, но когда вижу отступы пробелами сильно раздражаюсь=)
Это если один отступ, а если большая вложенность? Там и по 20 пробелов может быть. :) Вообще шучу. Тоже сам не знаю почему, но пробелы не нравятся.


Название: Re: Пробелы против табов
Отправлено: kuzulis от Апрель 22, 2011, 09:24
А я наоборот, давно отказался от табов (буэээ) , еще со студенческих времен.
Текст с пробелами воспринимается гораздо лучше, нежели с табами (если имеется подсветка - то визуальное отображение символов табуляции рвет мой моск).
Да и если надо быстро открыть и просмотреть код с табами в каком нить "левом" просмотрщике (блокнот)
то оно там всё съежжает хз куда.

Обычно табуляция встречается в исходниках виндузятников, поэтому буээ.. :)


Название: Re: Пробелы против табов
Отправлено: brankovic от Апрель 22, 2011, 09:34
1. стандартный таб в юниксах экспендится в 8 (!) пробелов. Консольные редакторы, утилиты по умолчанию отображают их как 8 пробелов. А когда вы вводите отступ в редаторе вы имеете ввиду от 2х до 5ти пробелов. В результате в консоли (less/diff/git) отображается каша. Настраивать 100 утилит ради того, чтобы потешить "табистов проекта" как-то не  хочется.

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

3. табы сложнее выцеплять регекспами, т.е. надо помнить, что там не ' *' а '\s*'. К тому же писать более громоздко и опять не хочется из-за чьей-то любви к табам. Если вы не грепаете сорсы, то это не проблема, но многие грепают.

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


Название: Re: Пробелы против табов
Отправлено: kuzulis от Апрель 22, 2011, 09:42
brankovic,
как хорошо сформулировал и резюмировал! +100500  ;D



Название: Re: Пробелы против табов
Отправлено: pastor от Апрель 22, 2011, 10:39
brankovic, +100

ЗЫ: пользуюсь пробелами тоже :)


Название: Re: Пробелы против табов
Отправлено: ieroglif от Апрель 22, 2011, 11:02
Ctrl+A, Ctrl+I и всё пофик =) спасибо QtCreator - давно такими вопросами не заморачиваюсь =)
для совместимости выставил отступы пробелами, размер таба = 4 пробела и забыл.


Название: Re: Пробелы против табов
Отправлено: Авварон от Апрель 22, 2011, 13:27
Все таки побольше минусов табов можно? Мне надо 1го табиста уговорить на пробелы перейти.
Пока я нашел минус когда
Код:
int f(int a){// comment
<tab>int a;  // comment
<tab>g(a);   // comment
}            // comment
При смене размера таба комменты поедут.

Igors
XCode нормально держит пробелы же ж.


Название: Re: Пробелы против табов
Отправлено: Denjs от Апрель 22, 2011, 18:04
???
Код:
int f(int a){// comment
<tab>int a;  // comment
<tab>g(a);   // comment
}            // comment

буээээ.... самый отвратный стиль форматирования)))
закрывающая скобка должна стоять под открывающей  ;)
Код:
int f(int a)
 {           // comment
    int a;  // comment
    g(a);   // comment
 };          // comment

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


Название: Re: Пробелы против табов
Отправлено: Igors от Апрель 22, 2011, 18:16
Все таки побольше минусов табов можно? Мне надо 1го табиста уговорить на пробелы перейти.
Ну надо заметить что пробелы имеют смысл если по клавише Tab вставляется нужное число пробелов. А добивать каждый раз 4 пробела не в кайф

Igors
XCode нормально держит пробелы же ж.
Та куда там. Я уже не знаю как ему угодить. Поставил шрифт 1 для всех выделений, непропорциональный Courier, переношу на MSVC - рванина  :'(. Ладно, мне на Вындоуз абы-как "проползти".


Название: Re: Пробелы против табов
Отправлено: blood_shadow от Апрель 22, 2011, 18:18

буээээ.... самый отвратный стиль форматирования)))
закрывающая скобка должна стоять под открывающей  ;)

сам такой стиль больше люблю, хотя в Qt Coding Style говорится что надо писать как в первом
варианте :)


Название: Re: Пробелы против табов
Отправлено: asvil от Апрель 22, 2011, 19:00
Цитировать
буээээ.... самый отвратный стиль форматирования)))
Цитировать

Имитация пайтона. Зачем операторы блока кода, если все равно ставяться отступы.


Название: Re: Пробелы против табов
Отправлено: ufna от Апрель 22, 2011, 20:05
Код:
int f(int a){// comment
<tab>int a;  // comment
<tab>g(a);   // comment
}            // comment

Вот +1 к этому.


Название: Re: Пробелы против табов
Отправлено: Авварон от Апрель 23, 2011, 01:33
Да че вы к скобке прицепились?))) мне было лень ставить энтер и отбивать ещё сколько-то там пробелов до еще 1го коммента, всего-то! Так-то да, скобку на новой строке ставлю.


Название: Re: Пробелы против табов
Отправлено: Sancho_s_rancho от Апрель 23, 2011, 08:28
Ctrl+A, Ctrl+I и всё пофик =) спасибо QtCreator - давно такими вопросами не заморачиваюсь =)
для совместимости выставил отступы пробелами, размер таба = 4 пробела и забыл.
Полностью поддерживаю. Ctrl+A, Ctrl+I, а когда уже много наваял, то и Ctrl+S.


Название: Re: Пробелы против табов
Отправлено: brankovic от Апрель 23, 2011, 13:10
>:( Табизмы >:(

Как два различных полюса,
Во всём враждебны мы.
За свет и мир мы боремся,
Они — за царство тьмы.

1. табист думает, что пользуется только табами, но иногда пробелы вкрадываются, а он их не замечает (ts=3):

Код:
   size_t size ( void ) const { return m_size; }
   bool empty ( void ) const { return m_size == 0; }

при ts=5 получаем:

Код:
     size_t size ( void ) const { return m_size; }
   bool empty ( void ) const { return m_size == 0; }

2. табист тоже знает, что сверхдлинные строки это плохо, но ничего не может поделать:

Код:
void
calculate_some (sieve_engine &e, matrix_cache &mc, grid_pool &gp,
                memory_engine &me, matrix const &adj,
                matrix_list const &input, driver &d, progress &pro)
{

при смене размера таба всё уедет:

Код:
void
calculate_some (sieve_engine &e, matrix_cache &mc, grid_pool &gp,
            memory_engine &me, matrix const &adj,
            matrix_list const &input, driver &d, progress &pro)
{

аналогичная проблема с многострочными операторами:

Код:
   if (e)
      throw std::runtime_error (
         lg (LVL_FATAL) << context_mark ("db_sync") << context_mark (objid)
                        << " cant sync object with db, sql error: "
                        << quote (e.what ()) << " (db is possibly corrupted);"
                        << " time: " << timer.secs ()
                        << to <std::string> ());

3. код табиста при ts=4 (очень красиво):

Код:
            T & operator[]  ( UInt32 index )        { return *At(index); }
    const   T & operator[]  ( UInt32 index ) const  { return *At(index); }

он же при ts=3 (пока сносно):

Код:
         T & operator[] ( UInt32 index )     { return *At(index); }
   const T & operator[] ( UInt32 index ) const  { return *At(index); }

он же при ts=6:

Код:
                  T & operator[]    ( UInt32 index )        { return *At(index); }
      const T & operator[]    ( UInt32 index ) const  { return *At(index); }

всё уехало, потому что таб имеет переменную длину, а слово const константную. Поэтому 2 таба не равны 1 табу и слову const.

4. код табиста невозможно преобразовать к пробелам простой заменой:

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

Код:
            T & operator[]    ( UInt32 index )        { return *At(index); }
    const    T & operator[]    ( UInt32 index ) const    { return *At(index); }

потому что таб иногда сжимается при отображении, последний в серии таб может занимать места как 4, 3, 2 или 1 пробел.

5. табист думает, что защищает свой образ мыслей и любимый редатор..

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