|
Персональные инструменты |
|||
|
Why I prefer no tabs in source codeМатериал из CustisWikiВерсия от 20:32, 10 августа 2010; StasFomin (обсуждение | вклад) Adam Spiers «Почему в коде я предпочел бы обойтись без табов» Перевод статьи Why I prefer no tabs in source code
Многие программисты смешивают в исходниках пробелы с табами — символами табуляции с ASCII-кодом 09, вместо того, чтобы использовать несколько (обычно 8) пробелов вместо таба. Да, это считается малозначительной вкусовщиной, но я считаю, что, как правило, это не шибко удачная идея, и ниже я поясню почему. «Как правило» — это потому, что в любом правиле есть исключения, которые подтверждают все правила без исключения. Ниженаписанное относится в основном к свободному софту, потому что из-за «базарной»[1] модели разработки высока публичность кода. Однако если вам не повезло, и вы работаете в компании не оставляющей никому выбора ни для правил отступов, ни текстового редактора, то, что поделать — эта статья вам все равно не пригодится. Итак, это: Менее переносимо, ибо разные редакторы/броузеры/просмотрщики отображают символ табуляции используя разное число пробелов, более того, большинство текстовых редакторов считают это пользовательской настройкой. Если вы используете пробелы без табов, вы никак и никогда не зависите от особенностей и настроек редакторов и просмотрщиков, вам не нужно выставлять им правильную ширину таба. Даже если вы готовы настраивать каждый редактор/просмотрщик под каждую используемую вами платформу, разве вы не усложняете жизнь остальным, кому надо читать и править ваш код? Становится очень сложно читать diff-результаты, как контекстные, так и в формате unified diff, так как там первый столбец означает тип изменения строчки. Для многих разработчиков сейчас это очень важно. И даже если вы разрабатываете ваш код в одиночку, насколько вы уверены, что никому и никогда не взглянет на ваш код, не будет его править и уж совсем никогда не пошлет вам патчи? Вообще у diff есть пара решений для этого — опции --expand-tabs и --initial-tab, но ни оба из них недостаточны. Становится сложно двигать блоки кода влево-вправо. Например, вы пытаетесь сдвинуть блок только на две колонки вправо — и это не действует на строчки начинающиеся с табов. Конечно, можно сказать все это не нужно, если у вас вменяемый редактор, делающий автоматический отступ, но автоматика не всегда срабатывает верно, особенно для Perl-а, когда даже GNU emacs не в силах разобраться с синтаксисом. И опять таки, вы уверены, что никто кроме вас не захочет переформатировать ваш код? Точно уверены? Сто пудов? Уверены что вы никогда не будете копипейстить фрагменты кода в почте? Ну, представьте, что будет с этим кодом, кто-то ответить на такое письмо.
Аргумент «табы хороши, потому, что каждый может выбрать удобную для себя ширину отступов» не работает, потому что:
typedef struct { int _mp_alloc; /* Number of *limbs* allocated and pointed to by the D field. */ int _mp_size; /* abs(SIZE) is the number of limbs the last field points to. If SIZE is negative this is a negative number. */ mp_limb_t *_mp_d; /* Pointer to the limbs. */ } __mpz_struct; И теперь представим бедолагу сидящего за терминалом 80x25, и решившего просмотреть форматированный табами код, но, не с жирными 8 пробелами на таб, ведь было бы ужасно читать из-за переносов строк или выходов за границы экрана, а задав 2 или 3 пробела на таб. Итак, он печатает less -x2 foo.c и бах — внезапно прямоугольные блоки комментария справа перестают быть выровненными по левому краю — что за фигня!
Если кто-то еще захочет просмотреть этот код в редакторе/листальщике с табами по 4 пробела, то в строчках с единичной глубиной будет отступ на 5 колонок, следующий уровень — 6 колонок, третий уровень — 11 колонок… Упс!
$ perl -pe 's/^(( )+)/$1$1/' foo.c | less
$ perl -pi -e 's/^( +)\1{7}/$1 x 3/e' foo.c
А вы что думаете? Я всегда интересуюсь чужой точкой зрения на этот вопрос. Может я что-то упустил? Или даже вы попробуете доказать мне что, я ошибаюсь?! Я человек широких взглядов, так что если вы убедите меня, я исправлю эту страницу и мой стиль кодирования. В противном же случае… Будь любезен, сделай всем одолжение! Напиши в свое ~/.emacs: (setq-default indent-tabs-mode nil) или в своей ~/.vimrc: :set expandtab Пишите, пожалуйста, мне, как это сделать в других текстовых редакторах. Отзывы и мнения остальныхУ полубога Линуса есть свои собственные заповеди, с некоторыми из которых я согласен.I agree with. Dawn Endico указал что известных нетскейпщик/мозильщик Jamie Zawinski тоже написал заметку по теме, аргументы которой схожи с моими, но изложение несколько отличается. Рекомендую взглянуть! Неизвестный доброжелатель послал мне пачку ссылок по теме. Я был рад узнать, что в целом, там со мной согласны :-)
Robert Swindell указал мне на интересное предложение «PT/SC», где параметры форматирования, такие, как ширина табов, хранятся в заголовке плоского текстового файла в едином, человекочитаемом формате. Давайте надеятся, что редакторы вскорости станут его поддерживать… Примечания
Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion». Репликация: База Знаний «Заказных Информ Систем» → «Why I prefer no tabs in source code» |
||