Пора завязывать использовать пробелы вместо табуляции в коде

Этот топик — ответ на топик «Пора завязывать использовать символы табуляции в коде».
Я хотел было ответить к комментариях, но в силу объема и желания независимости от исходного топика решил создать новый топик.
Итак, под катом — почему табы лучше пробелов, самые значительные заблуждения касательно табов и как ими правильно пользоваться.
Начнём с того, что большинство людей (по крайней мере на Хабре) предпочитают табы.
По ссылке есть очень классный комментарий от GreyCat:
На самом деле странно то, что многие до сих пор не отличают indentation и alignment. Ну, вот это — indentation:
for (int i = 0; i
А вот это — alignment:
int some_variable = 0; int v1 = 0;
Первое можно делать и табами, и пробелами, но когда делаешь табами — каждый может подстроить ширину indent’а на свой вкус и ничего никуда не едет. А второе — строго пробелами.

В IDE есть опция Smart Tabs для этого:
Если правильно использовать табы (а именно — только для indentation) — можно без проблем менять размер табов не нарушая стиль программирования.
2 пробела на таб:
5 пробелов на таб:
9 пробелов на таб: 
Так каких проблем мы лишаемся?
1. Каждый программист может настроить длину табуляции под свой вкус. Всегда работает на практике. Когда код с большой вложенностью — можно поставить ширину табуляции в два пробела, иначе — в четыре.
2. Легче работать с посторонними библиотеками. Какие-то библиотеки поддерживают стиль с шириной таба в два пробела, какие-то с шириной в четыре пробела. Только использование табов не накладывает ограничение на стиль.
Процитирую пару мыслей из предыдущего топика:
Тяжело работать с проектами, где используются библиотеки, содержащие в тесте табуляции. Предположим, в одной библиотеке табуляция равна 3 символам, в другой 4 символам. А вы в проекте используете 2 символа. В результате какая-то часть кода у вас будет отображаться в редакторе со сбитым форматированием.
На самом деле в проектах, которые используют табуляцию таких проблем нету — так как табуляция безразмерна, а вот поддерживать одновременно пару библиотек с разным размером пробело-табуляции становится проблематичным, т.к. уже нельзя пользоваться tab (чтобы IDE заменяла табы на пробелы). Конечно, есть шанс решить такую проблему разными проектами с разными настройками, но это тот еще костыль, да и башку все-равно сносит от разных размеров вложенности.
Легко пустить козла в огород. Скажем у вас табуляция равна 4 пробелам. Кто-то что-то чуть-чуть поправил, используя другой размер табуляции или явно вставив пробелы. У него все смотрелось нормально, а у вас строчка кода куда-то уедет.
Аналогично, табуляция — безразмерная. Такая проблема есть только в проектах, которые используют пробелы. Там где используются табы — они могут быть хоть 2, хоть 10 символов шириной.
Надо постоянно настраивать различные редакторы под нужный вам размер табуляции. Даже если вам нужно просто посмотреть код не правя. Иначе все разъезжается. Особенно это не удобно, когда приходится что-то делать со своим кодом на сторонней машине.
Допустим, я открываю Kate, чтобы по-быстряку поправить код в каком-то файле. Оппа, размер табуляции два пробела. Надо лезть в конфиг. А в соседнем файле из другой либы — четыре пробела. Придётся пользоваться пробелом вместо таба для отступов, ужас. С табами такой проблемы нету.
Лишние сложности тем, кто работает одновременно с проектами, где по стандартам кодирования требуются разные отступы. Если стандарты требуют использование табуляции, то это ещё тот вечно ноющий зуб. В случае пробелов опять-таки все намного проще.
Как выше разобрали, такая проблема есть именно с проблемами, а не с табами.
А еще дополнительно у пробелов есть такие недостатки, как невозможность быстрого перемещения стрелочками клавиатуры (щёлкает каждый пробел, а не через блок), возможность допустить ошибку (поставить в одном месте 3 пробела вместо 4, чем порушить дальнейшую структуру), увеличение размера файла и куча всего ещё.
Вывод
У пробелов нету ни одного существенного преимущество по сравнению с табами, при этом мы не сковываем программиста в рамки и не заставляем его мучаться с слишком маленькими (или слишком большими) для него табами.
Главное
Не так важно, что именно вы используете. Важно, чтобы вы следили за порядком своего кода и всегда придерживались одного и того же стиля. Включите отображение табов/пробелов, иногда меняйте размер табуляции на другой и пробегайте глазами код, чтобы удостоверится, что у вас где-то не вставились пробелы вместо табов или табы вместо пробелов.
UPD: примечание согласно комментариев
Я давно хотел написать статью про табы. Но не про «Табы VS Пробелы», а именно про то, как пользоваться табами правильно. Комменты подтвердили, что многие не знали про indentation и alignment. Смысл этой статьи совершенно не в том, что правы все, кто использует табы. Есть стандарты кодирования, есть особенности языка, есть личные предпочтения.
Самое главное — знать правила расстановки отступов и уметь ими пользоваться. И никогда не смешивать два стиля. Заметьте — не «не смешивать табы и пробелы», а не смешивать два стиля.
Лично я рекомендую использовать подход, описанный в топике, но только в том случае, если стандарты кода, с котором вы работаете не подразумевают что-то другое.
- табуляция
- программирование
- исходный код
- пробелы — говно
- форматирование кода
- оформление кода
- стандарты кодирования
- indentation
- alignment
- отступы
- выравнивание
Управляющие элементы закладки «Тексты» предназначены для управления встроенным текстовым редактором системы 1С:Предприятие.
Перетаскивание текста. В редакторе текстов для перемещения и копирования блоков текста можно использовать режим «drag & drop» («перенеси и оставь»).
Разрешить помещать курсор после концов строк. Если установлено, то курсор можно помещать после концов строк. В противном случае положение курсора ограничивается положением символа «перевод строки».
Отображать пробелы и табуляцию. Если установлено, то символы пробелов и табуляции будут показываться в тексте. Этот режим устанавливается для проверки форматирования текста. Если установлено свойство Отображать пробелы и табуляцию, то становится доступными свойства Пробел и Табуляция для ввода символов, которыми будет осуществляться показ пробелов и табуляции.
Пробел. Указывается символ показа пробелов.
Табуляция. Указывается символ показа табуляции.
Заменять табуляцию при вводе. Если установлено, то при вводе текста символ табуляции заменяется на установленное в свойстве Ширина табуляции число пробелов.
Ширина табуляции. Устанавливает соответствие символа табуляции числу символов при вводе текста.
Автоотступ. Устанавливает или отменяет автоматический отступ при вводе символа «Перевод строки» (при нажатии клавиши Enter).
Шрифт. Выбор шрифта, используемого при вводе текста. Для ввода текста модулей рекомендуется выбирать моноширинные шрифты (например, Courier New — используется по умолчанию).
Цвет фона результатов поиска. Выбор цвета фона, используемого для отображения результатов поиска.
Автозамена.Если свойство включено, то вводимый текст, если он совпадает с текстом, указанным в шаблоне в реквизите «Автоматически заменять строку», будет заменяться на текст шаблона. Если значение свойства выбрано «Включить с подсказкой», то при наборе заменяемого текста после небольшой паузы будет выведен текст шаблона. Если значение свойства выбрано «Только подсказка», то при наборе заменяемого текста после небольшой паузы будет выведен текст подсказки.
Для того, чтобы вводимый текст заменялся на текст шаблона, нужно после набора строки нажать клавишу «пробел» или Enter. Если значение свойства Автозамена выбрано «Отключить» или «Только подсказка», то данные действия не выполняются.
Seeking Comprehensive ERP Solution?
Transform Your Business with Axial ERP
Personalized solutions with continuous support. Propel your business with modern, comprehensive ERP solutions based on 1C:Enterprise.
УРОК 9. Дополнительные настройки программы
Для перехода в режим работы с дополнительными настройками программы предназначена команда главного меню Сервис ? Параметры. При активизации данной команды на экране открывается окно, изображенное на рис. 1.26.

Рис. 1.26. Настройка прочих параметров программы
В этом окне на вкладке Общие определяется значение рабочей даты, используемой в конфигурации. Рабочая дата – это дата, которая будет по умолчанию подставляться во вновь создаваемые документы и формы, использоваться при расчете курсов валют, а также в иных случаях, когда конкретная дата не указана. Если на данной вкладке установить флажок Использовать текущую дату компьютера, то в качестве рабочей даты будет использоваться текущая дата компьютера. Если же данный флажок снят, то рабочую дату нужно будет ввести в расположенном ниже поле Использовать значение (по умолчанию здесь отображается системная дата компьютера).
На вкладке Тексты (см. рис. 1.26) выполняется настройка параметров работы с текстовыми данными. Если установлен флажок Перетаскивание текста, то при работе с блоками (выделенными фрагментами) текста можно будет выполнять его перетаскивание мышью с помощью метода drag & drop (перетащить и бросить). При установленном флажке Разрешать помещать курсор после концов строк курсор в тексте можно будет помещать в конце строк; в противном случае – только перед символом «перевод строки», который устанавливается нажатием клавиши .
Если установлен флажок Отображать пробелы и табуляции, то в текстовом документе будут отображаться символы пробела и табуляции. Этот режим удобно использовать для форматирования текстовых документов. При установленном данном флажке становятся доступными поля Пробел и Табуляция, в которых с клавиатуры вводятся символы соответственно пробела и табуляции.
При необходимости можно включить режим, при котором символ табуляции будет автоматически заменяться определенным количеством пробелов. Для этого нужно установить флажок Заменять табуляцию при вводе и в расположенном ниже поле Ширина табуляции с клавиатуры либо с помощью кнопок счетчика ввести требуемое число пробелов.
В поле Автоотступ можно установить либо отключить режим автоматического отступа при нажатии клавиши . Требуемое значение выбирается из раскрывающегося списка, возможные варианты – Включить либо Отключить.
В поле Шрифт осуществляется выбор шрифта, который будет использоваться при наборе текста. При нажатии кнопки выбора на экране открывается окно настройки параметров шрифта, в котором выполняются необходимые действия.
На вкладке Справка с помощью переключателя Справочная информация выбирается способ представления справочной информации. Если данный переключатель установлен в положение Выводить в одном окне, то все элементы справки будут показываться в одном окне. Если же выбрано значение Выводить в разных окнах (это значение установлено по умолчанию), то разные элементы справочной информации будут выводиться по отдельности – каждый элемент в своем окне. Первый вариант позволяет избежать нагромождения окон при частом вызове разных элементов и разделов справочной информации; с помощью второго варианта можно одновременно просматривать несколько разных элементов (разделов) справки.
Все изменения, выполненные на вкладках окна настройки параметров, вступают в силу только после нажатия кнопок OK либо Применить. С помощью кнопки Отмена осуществляется выход из данного режима без сохранения выполненных изменений.
Данный текст является ознакомительным фрагментом.
Оформление кода в модуле
В системе 1С, при работе с модулем используется единое оформление. Данное оформление модуля можно изменить.
Стандартное оформление:
Цвета:
Красным цветом выделяются операторы и ключевые слова.
Зеленым оформляются комментарии.
А синим оформляются идентификаторы.
Отступ у вложенных блоков, к примеру у операторах цикла имеют отступ 4 символа.
Изменение оформления:
Данное оформление можно изменить, к примеру если у вам маленький экран. Для этого необходимо зайти в меню «Сервис > Параметры». В открывшемся окне «Параметры», откроем закладку Модули, а в ней Редактирование.
В данной закладке можно:
-
- Настроить выделение синтаксических конструкций, для этого есть список Выделение цветом синтаксических конструкций .
- Запретить выделение цветом
- включить Автозамену , об этом расскажу позже. В общем данная опция позволяет автоматически заменять вводимый текст, на текст из шаблонов.
- включить автоматическую замену в комментариях.
- Заменять табуляцию при вводе , включая данную опцию табуляция будет заменятся на пробелы.
- Ширина табуляции позволяет указать отступ в конструкции встроенного языка.
- Автоотступ — позволяет обрабатывать автоотступ при переноси строки. По умолчанию обрабатывается с учетом синтаксических конструкций.
- И последние, это возможность выбора шрифта .
Лично я, не изменяю ничего кроме Автозамена. Еще я уменьшаю Ширина табуляции, на 2 символа, но только для нетбука.
Форматирование кода
В 1С можно автоматически форматировать текст кода, т.е. расставлять отступы. У меня на картинке изображен кусок кода который оформлен не верно. Что бы привести в порядок код, выделим его и нажмем на кнопку 1.
Такого рода конструкции можно писать сразу нормально, т.к. при переносе система сама ставит отступы. Но бывает когда код занимает много места и из него удаляется цикл, что влечет за собой смещение операторов внутри цикла.
Так же в 1С, можно смещать выделенные строки 1 знак табуляции влево и вправо. Для этого есть кнопка 2 и 3, которые изображены на рисунке.