<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://lib.custis.ru/index.php?action=history&amp;feed=atom&amp;title=Why_I_love_having_tabs_in_source_code</id>
		<title>Why I love having tabs in source code - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://lib.custis.ru/index.php?action=history&amp;feed=atom&amp;title=Why_I_love_having_tabs_in_source_code"/>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Why_I_love_having_tabs_in_source_code&amp;action=history"/>
		<updated>2026-05-03T07:17:56Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Why_I_love_having_tabs_in_source_code&amp;diff=17303&amp;oldid=prev</id>
		<title>BenderBot: 1 версия</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Why_I_love_having_tabs_in_source_code&amp;diff=17303&amp;oldid=prev"/>
				<updated>2010-08-11T00:01:43Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;tr style='vertical-align: top;' lang='ru'&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 00:01, 11 августа 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2' style='text-align: center;' lang='ru'&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>BenderBot</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Why_I_love_having_tabs_in_source_code&amp;diff=17302&amp;oldid=prev</id>
		<title>StasFomin в 17:21, 10 августа 2010</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Why_I_love_having_tabs_in_source_code&amp;diff=17302&amp;oldid=prev"/>
				<updated>2010-08-10T17:21:49Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Перевод статьи http://derkarl.org/why_to_tabs.html&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Многие делают отступы пробелами. Но в целом, это плохая идея.&lt;br /&gt;
Если бы табы использовали для отступов, а пробелы — для остального форматирования, проблемы бы не было.&lt;br /&gt;
По крайней мере современные редакторы, такие как &amp;lt;tt&amp;gt;VIM&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;KWrite&amp;lt;/tt&amp;gt;,&lt;br /&gt;
нормально обращаются с табами.&lt;br /&gt;
&lt;br /&gt;
Мои контраргументы к утверждениям статьи «[[Why I prefer no tabs in source code]]», агитирующей за пробелы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Табы менее переносимы, ибо разные редакторы/броузеры/просмотрщики отображают символ табуляции используя разное число пробелов, более того, большинство текстовых редакторов считают это пользовательской настройкой.&lt;br /&gt;
&lt;br /&gt;
Если вы используете пробелы без табов, вы никак и никогда не зависите от особенностей и настроек редакторов и просмотрщиков, вам не нужно выставлять им правильную ширину таба. Даже если вы готовы настраивать каждый редактор/просмотрщик под каждую используемую вами платформу, разве вы не усложняете жизнь остальным, кому надо читать и править ваш код?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На самом деле это более переносимо.&lt;br /&gt;
Я не знаю никого, кто делает отступы пробелами, восемь раз нажимая на пробел,&lt;br /&gt;
просто они обычно настраивают их текстовый редактор, что таб это восемь пробелов.&lt;br /&gt;
И неважно, насколько «глубоки» и «широки» ваши табы,&lt;br /&gt;
читатель просто настроит глубину табов как ему удобно, без необходимости переформатировать файл, ведь переформатирование файла (даже с одним отступом) делает сравнение полностью невозможным, ибо изменяется все!&lt;br /&gt;
Табы решают эту проблему, можно интерпретировать их как 4-пробельные или 8-пробельные отступы, без изменения файла.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Становится очень сложно читать ''diff''-результаты, как контекстные, так и в формате ''unified diff'', так как там первый столбец означает тип изменения строчки. Для многих разработчиков сейчас это очень важно. И даже если вы разрабатываете ваш код в одиночку, насколько вы уверены, что никому и никогда не взглянет на ваш код, не будет его править и уж совсем никогда не пошлет вам патчи?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это совершенная неправда, на самом деле, как я выше уже утверждал, отступы с табуляциями упрощают чтение diff-ов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Становится сложно двигать блоки кода влево-вправо. Например, вы пытаетесь сдвинуть блок на две колонки вправо — и это не действует на строчки начинающиеся с табов.&lt;br /&gt;
&lt;br /&gt;
Конечно, можно сказать все это не потребуется для вменяемые редакторов, которые делают автоматические отступы,&lt;br /&gt;
но автоматика не всегда может сработать правильно, особенно для [http://www.perl.com/ Perl]-а, когда даже &amp;lt;tt&amp;gt;[http://www.gnu.org/software/emacs/ GNU emacs]&amp;lt;/tt&amp;gt; не в силах разобраться с синтаксисом.&lt;br /&gt;
&lt;br /&gt;
И опять таки, вы уверены, что никто кроме вас не захочет переформатировать ваш код?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автоматическое переформатирование ваших файлов с использованием &amp;lt;tt&amp;gt;sed&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;perl&amp;lt;/tt&amp;gt; на самом деле гораздо легче, если используются табы, так как каждый уровень задается в точности одним символом, и не надо подсчитывать пробелы, пытаясь определить ширину таба — 8, 4 или сколько там еще пробелов.&lt;br /&gt;
А редакторы, которые не справляются с табами, — это вовсе не редакторы, а недоразумение (вспоминается &amp;lt;tt&amp;gt;emacs&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Аргумент «табы хороши, потому, что каждый может выбрать удобную для себя ширину отступов» не работает, потому что:&lt;br /&gt;
* Табы используются не только в начале строк. Может многострочный комментарий, с левым выравниванием текста, но размещенный справа от кода, в общем, вглянем на реальный пример из &amp;lt;tt&amp;gt;/usr/include/gmp.h&amp;lt;/tt&amp;gt;, найденный на FreeBSD-системе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-c&amp;gt;&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
  int _mp_alloc;                /* Number of *limbs* allocated and pointed&lt;br /&gt;
                                   to by the D field.  */&lt;br /&gt;
  int _mp_size;                 /* abs(SIZE) is the number of limbs&lt;br /&gt;
                                   the last field points to.  If SIZE&lt;br /&gt;
                                   is negative this is a negative&lt;br /&gt;
                                   number.  */&lt;br /&gt;
  mp_limb_t *_mp_d;             /* Pointer to the limbs.  */&lt;br /&gt;
} __mpz_struct;&lt;br /&gt;
&amp;lt;/code-c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И теперь представим бедолагу сидящего за терминалом 80x25, и решившего просмотреть форматированный табами код не из расчета 8 пробелов на таб, ведь это было бы ужасно читать из-за переносов строк или выходу за границы экрана, а задав 2 или 3 пробела на таб.&lt;br /&gt;
Итак, он печатает&lt;br /&gt;
  less -x2 foo.c&lt;br /&gt;
и бах — внезапно прямоугольные блоки комментарие справа перестают быть выровненными по левому краю — что за фигня!&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Табы используются для отступов, для отступов и только для отступов.&lt;br /&gt;
Они не предназначены для форматирования текста, для выравнивания колонок,&lt;br /&gt;
или выстраивания ваших комментариев квадратиками. Пробелы предназначены для этого.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Проблемы могут быть даже если табы только в началах строк. Допустим, какой-то код был написан на &amp;lt;tt&amp;gt;emacs&amp;lt;/tt&amp;gt; с табами по восемь пробелов, но со стилем отступов «Kernighan &amp;amp; Ritchie», где отступы в 5 пробелов. Если &amp;lt;tt&amp;gt;emacs&amp;lt;/tt&amp;gt; настроен на использование табов, строчки с одним отступом будут отбиты пятью пробелами, строчки с двумя отступами будут отбиты табом и двумя пробелами (&amp;lt;tt&amp;gt;8 + 2 == 10&amp;lt;/tt&amp;gt;).&lt;br /&gt;
Если кто-то еще захочет просмотреть этот код в редакторе/листальщике с табами по 4 пробела, то&lt;br /&gt;
в строчках с единичной глубиной будет отступ на 5 колонок, следующий уровень — 6 колонок, третий уровень — 11 колонок… Упс!&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Во-первых, K&amp;amp;R-стиль давно устарел.&lt;br /&gt;
Ничего страшного, если вы смените K&amp;amp;R-стиль на табы, где табы ровно &amp;lt;tt&amp;gt;X&amp;lt;/tt&amp;gt; пробелов, и где каждый столбец будет на уровне кратном &amp;lt;tt&amp;gt;X&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
На самом деле, преимущество табов можно увидеть на примере&lt;br /&gt;
CVS-репозитория [http://www.kde.org/ kde].&lt;br /&gt;
&lt;br /&gt;
В основном код там допускает отступы пробелами и большая его часть&lt;br /&gt;
непоследовательно содержит пробелы и табы вперемешку.&lt;br /&gt;
&lt;br /&gt;
И только малая часть модулей (&amp;lt;tt&amp;gt;aRts&amp;lt;/tt&amp;gt;, Noatun) на 100% последовательна — та, где код форматируется табами.&lt;br /&gt;
&lt;br /&gt;
Лучше делать форматировать так (обозначим табы подчеркиваниями, а пробелы — точками):&lt;br /&gt;
&lt;br /&gt;
 _____if.(true)....//This should be replaced&lt;br /&gt;
 _____{............//with a proper boolean&lt;br /&gt;
 __________func();&lt;br /&gt;
 _____}&lt;br /&gt;
&lt;br /&gt;
На любом уровне, все будет выравнено:&lt;br /&gt;
&lt;br /&gt;
 SomeClass::SomeClass()&lt;br /&gt;
 _____.:.InheritingClass(false, false&lt;br /&gt;
 _____...................5, 10, true,&lt;br /&gt;
 _____...................bleh, blah)&lt;br /&gt;
 {&lt;br /&gt;
 // ....&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// vim: ts=4 noet&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Tabs vs. Spaces]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ActualBanner}}&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>StasFomin</name></author>	</entry>

	</feed>