Главная страница » Что такое табуляция в программировании

Что такое табуляция в программировании

  • автор:

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


Этот топик — ответ на топик «Пора завязывать использовать символы табуляции в коде».
Я хотел было ответить к комментариях, но в силу объема и желания независимости от исходного топика решил создать новый топик.

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

Начнём с того, что большинство людей (по крайней мере на Хабре) предпочитают табы.

По ссылке есть очень классный комментарий от GreyCat:

На самом деле странно то, что многие до сих пор не отличают indentation и alignment. Ну, вот это — indentation:

А вот это — alignment:

Первое можно делать и табами, и пробелами, но когда делаешь табами — каждый может подстроить ширину indent’а на свой вкус и ничего никуда не едет. А второе — строго пробелами.

В IDE есть опция Smart Tabs для этого:

Если правильно использовать табы (а именно — только для indentation) — можно без проблем менять размер табов не нарушая стиль программирования.

2 пробела на таб:


5 пробелов на таб:

9 пробелов на таб:

Так каких проблем мы лишаемся?

1. Каждый программист может настроить длину табуляции под свой вкус. Всегда работает на практике. Когда код с большой вложенностью — можно поставить ширину табуляции в два пробела, иначе — в четыре.
2. Легче работать с посторонними библиотеками. Какие-то библиотеки поддерживают стиль с шириной таба в два пробела, какие-то с шириной в четыре пробела. Только использование табов не накладывает ограничение на стиль.

Процитирую пару мыслей из предыдущего топика:

На самом деле в проектах, которые используют табуляцию таких проблем нету — так как табуляция безразмерна, а вот поддерживать одновременно пару библиотек с разным размером пробело-табуляции становится проблематичным, т.к. уже нельзя пользоваться tab (чтобы IDE заменяла табы на пробелы). Конечно, есть шанс решить такую проблему разными проектами с разными настройками, но это тот еще костыль, да и башку все-равно сносит от разных размеров вложенности.

Аналогично, табуляция — безразмерная. Такая проблема есть только в проектах, которые используют пробелы. Там где используются табы — они могут быть хоть 2, хоть 10 символов шириной.

Допустим, я открываю Kate, чтобы по-быстряку поправить код в каком-то файле. Оппа, размер табуляции два пробела. Надо лезть в конфиг. А в соседнем файле из другой либы — четыре пробела. Придётся пользоваться пробелом вместо таба для отступов, ужас. С табами такой проблемы нету.

Как выше разобрали, такая проблема есть именно с проблемами, а не с табами.

А еще дополнительно у пробелов есть такие недостатки, как невозможность быстрого перемещения стрелочками клавиатуры (щёлкает каждый пробел, а не через блок), возможность допустить ошибку (поставить в одном месте 3 пробела вместо 4, чем порушить дальнейшую структуру), увеличение размера файла и куча всего ещё.

Вывод

У пробелов нету ни одного существенного преимущество по сравнению с табами, при этом мы не сковываем программиста в рамки и не заставляем его мучаться с слишком маленькими (или слишком большими) для него табами.

Главное

Не так важно, что именно вы используете. Важно, чтобы вы следили за порядком своего кода и всегда придерживались одного и того же стиля. Включите отображение табов/пробелов, иногда меняйте размер табуляции на другой и пробегайте глазами код, чтобы удостоверится, что у вас где-то не вставились пробелы вместо табов или табы вместо пробелов.

Что означает "tab" в программировании?

Читаю книжечку «Code Conventions» и наткнулся на эту не до конца понятную для себя вещь:

Indentation.
Four spaces should be used as the unit of indentation. The exact construction of the indentation (spaces vs. tabs) is unspecified. Tabs must be set exactly every 8 spaces (not 4).

Переведите дословно, пожалуйста, что означает слово «TAB» или «TABS» в русском языке? Гугл переводит, как «вкладка», но не до конца понятно это.

Kromster's user avatar

Programmer's user avatar

Подразумевается клавиша «Tab» на клавиатуре.

Orizz's user avatar

Действительно, есть с этим путаница. У вас, во втором предложении «The exact construction of the indentation (spaces vs. tabs) is unspecified», под «tabs» подразумеваются символы табуляции. Но тут же в третьем предложении «Tabs must be set exactly every 8 spaces (not 4)», под «Tabs» имеются в виду отступы от левой границы.

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

Все эти соглашения нужны для того, чтобы все участники команды видели бы текст программы одинаково так же, как его отформатировал автор. А иначе, если настройки не будут согласованы, то форматирование «уедет».

Табуляция

Горизонтальная табуляция (HT, TAB) — управляющий символ таблицы ASCII с кодом 0916, используется для выравнивания текста по горизонтали. Встретив этот символ, терминал перемещает каретку (или курсор) вправо на ближайшую позицию табуляции. Традиционно эти позиции располагаются каждые 8 знакомест, в колонках 1, 9, 17, 25… Вводится при помощи клавиши  Tab ⇆  , во многих языках программирования обозначается как \t.

Если отправить на печать текст (символ табуляции обозначен стрелкой)

получим такую распечатку:

Также существует вертикальная табуляция VT с кодом 0B16, в настоящее время используемая крайне редко.

Содержание

В текстовых редакторах

В текстовых редакторах позиции табуляции могут идти каждые 2 или 4 знакоместа: это удобно для работы с языками программирования. По желанию пользователя клавиша  Tab ⇆  может не вставлять символ-табулятор, а имитировать его, вставляя нужное количество пробелов.

Одни стандарты оформления кода категорически запрещают символы-табуляторы: независимо от того, на сколько позиций настроен редактор или просмотрщик, текст будет выглядеть одинаково; в строковых константах же невидимый символ можно спутать с пробелом. Другие — требуют пользоваться именно табуляторами, а не пробелами.

В текстовых процессорах

Текстовые процессоры позволяют расставлять позиции табуляции в любых местах текста и выравнивать текст по любую сторону этих позиций (по левую сторону, по центру, по правую сторону). При желании символ табуляции может отображаться как отточие. С помощью табуляторов часто реализуются нумерация формул, списки определений, оглавления.

Сходная функциональность у таблиц. Но есть и отличия: текст, выровненный табуляторами, невозможно разлиновать на строки и столбцы. Зато в таблицах текст не может выходить за пределы ячеек.

Табуляция в (X)HTML

В (X)HTML горизонтальная табуляция обозначается как &#9;, однако она отобразится браузером только будучи использованной внутри тегов <pre> и <textarea>:

Пример HTML-кода с использованием внутри тега <pre>

Браузер отобразит этот код так:

Вертикальная табуляция обозначается как &#11;, однако она не используется в SGML (включая HTML) или XML 1.0.

Клавиша  Tab ⇆  в прикладном ПО

За клавишей  Tab ⇆  закрепились такие функции:

  • В текстовых редакторах, текстовых процессорах — ввод символа табуляции, работа с отступами.
  • В графических интерфейсах — прыжок. В частности, в Windows Tab ⇆   — переключение между элементами текущего окна,  Alt   +  Tab ⇆   — переключение между программами. Прыжок в обратную сторону —  ⇧ Shift   +  Tab ⇆  .
  • В консольных интерфейсах (например IOS, bash, Zsh), в том числе в консолях компьютерных игр (например, Quake 3, Doom 3, Unreal Tournament) — автодополнение команды.

См. также

    — формат представления табличных данных, использующий табуляцию как разделитель
  • Клавиатура
  • Управляющие символы
  • Непечатаемые знаки
  • Пробельные символы
  • Стандарт оформления кода

Wikimedia Foundation . 2010 .

Полезное

Смотреть что такое «Табуляция» в других словарях:

табуляция — сущ., кол во синонимов: 1 • табулирование (1) Словарь синонимов ASIS. В.Н. Тришин. 2013 … Словарь синонимов

табуляция — Перемещение курсора к следующей позиции. [http://www.morepc.ru/dict/] Тематики информационные технологии в целом EN tabulation … Справочник технического переводчика

табуляция — табул яция, и … Русский орфографический словарь

Горизонтальная табуляция — Источник: ГОСТ 22562 77: Аппараты телеграфные буквопечатающие. Термины и определения оригинал документа Смотри также родственные термины … Словарь-справочник терминов нормативно-технической документации

вертикальная табуляция — вертикальное форматирование Возможность текстового редактора размещать текст вертикально внутри границ, установленных пользователем. [ГОСТ Р ИСО/МЭК 2382 23 2004] вертикальная табуляция Число строк, которые должны быть пропущены на странице перед … Справочник технического переводчика

горизонтальная табуляция — горизонтальное форматирование Возможность текстового редактора размещать текст горизонтально внутри границ, установленных пользователем. [ГОСТ Р ИСО/МЭК 2382 23 2004] горизонтальная табуляция Горизонтальное перемещение положения курсора к… … Справочник технического переводчика

КРОСС-ТАБУЛЯЦИЯ — (CROSS TABULATION) Распространенным способом представления данных являются двумерные таблицы, в которых значения одной переменной соотносятся со значениями другой. Примером может служить кросс табуляция электоральных намерений и социального… … Социологический словарь

вертикальная табуляция — stačiasis tabuliavimas statusas T sritis radioelektronika atitikmenys: angl. vertical tabulation vok. Vertikaltabulation, f rus. вертикальная табуляция, f pranc. tabulation verticale, f … Radioelektronikos terminų žodynas

комбинированная табуляция (данных) — — [А.С.Гольдберг. Англо русский энергетический словарь. 2006 г.] Тематики энергетика в целом EN cross tabulation … Справочник технического переводчика

Символы управления в программировании

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

Особое внимание будет уделено символу «t». Он используется в самых популярных языках программирования для обозначения специальной команды управления.

Особенности T

T – латинская буква, используется в IT достаточно давно, но ее утверждение как часть Unicode состоялось только в 1993 году. Парной зеркальной скобки не имеет. Композиционные исключения отсутствуют.

У заглавной T несколько способов выражения:

  • \0054 – в CSS;
  • &#84 – в HTML-языке;
  • U+0054 – в Юникоде.

У строчной t они будут следующими:

  • U+0074 – для Unicode;
  • \0074 – для CSS;
  • &#116 – в HTML-коде.

Строчной рассматриваемый символ был официально закреплен в Unicode 1.1 тогда, когда и заглавный.

Управляющие символы

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

Сейчас в основном используются:

  • языки управления устройствами;
  • сетевые протоколы;
  • форматы файлов.

Это приводит к тому, что управляющие символы или не используются, или применяются не по прямому назначению.

В стандарте POSIX (переносимом интерфейсе операционных систем) обязательно используются символы так называемого переносимого набора. Он включает в себя 103 элемента. Они должны присутствовать в любой кодировке, а также в языках программирования.

В Python

В Питоне, как и в других ЯП, часто встречаются такие «знаки»:

  • \n – отвечает за перевод каретки (указателя) на следующую строку;
  • \r – перевод на начало текущей строки;
  • \b – перевод на один элемент (знак) назад.

Запись типа «\t» — это табуляция. Обозначение произошло от «tab». Данная «команда» — это своеобразная «красная строка». Отвечает за появление отступа.

Выше – наглядный пример того, как работает соответствующие элементы в программном коде Pascal.

Escape-последовательности – это символы, которые выталкиваются в поток вывода, необходимые для форматирования информации, отображаемой на дисплее устройства. Иногда в C++ помогают печатать некоторые «управляющие знаки».

Символ За что отвечает
\t Организовывает горизонтальную табуляцию
\n Новая строка
\r Переводит каретку на начало текущей строки
\v Вертикальная табуляция
Ничего никуда не переводит. Позволяет проставить двойные кавычки
\’ Обозначает знак апострофа
\\ Приводит к печати обратного слеша
\0 Тоже не переводит каретку в ту или иную область. Вместо этого печатает нулевой символ
\? Знак вопроса
\a «Спикер» компьютера. Активирует компьютерный специализированный сигнал.

Все эти элементы должны оформляться в двойных кавычках. Если в C++ нужно вывести то или иное сообщение, предложенные вниманию элементы записываются прямо в нем. Там, где нужно. Если пренебрегать данным принципам, строка будет считана без учета управляющих элементов.

Выше – пример того, как выглядит программа с рассматриваемыми компонентами. В 9 строке в выходной поток поступает «сигнал», отвечающий за перевод каретки на две табуляции. Далее происходит печать сообщения.

В 10 строчке происходит возврат каретки с печатью характерного сообщения. Оно займет место надписи, которая была на предыдущем шаге. Строка 11 отвечает за перевод «текста» в оформленный в кавычки. Строка 12 нужна для того, чтобы при запуске приложения воспроизводился характерный звук.

ASCII

Таблица ASCII впервые возникла в 1963 году. В ней были закреплены управляющие «знаки». Всего их 29 штук. Большинство из них находилось в диапазоне 00-1F.

Соответствующие компоненты применялись не для того, чтобы осуществлять перевод каретки на компьютере, а для телетайпов и видеотерминалов. Вводились вместе с клавишей ctrl. Она обнуляла в коде введенной клавиши бит 6.

Сейчас управляющие символьные обозначения ASCII нигде, кроме терминальных эмуляторов, не используются. Напрямую поддерживается ввод перевода строки, а также табуляции. Большинство представленных элементов на деле не имеют практического применения.

Особенности переносимого набора

Обычно является основным набором всех современных языков программирования. На коды символов отсюда накладываются определенные ограничения:

  • NULL не может кодироваться числом;
  • десятичные цифры идут по возрастанию, а коды соседних элементов различаются на единицу;
  • для одного элемента при кодировании достаточно одного байта;
  • при использовании в языке C типа char, получающиеся коды должны быть неотрицательными.

Символ t использовать для перевода каретки проще простого. Никаких особенностей и ограничений он не имеет.

Как лучше разобраться в теме

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

На них в срок до 12 месяцев пользователи смогут разобраться с выбранным ЯП, а также любым его инструментом. Программа подбирается с учетом первоначального спектра знаний и навыков у ученика. В процессе обучения гарантируется постоянное кураторство, а также богатый практический опыт. Подтверждаются полученные навыки и умения при помощи официального электронного сертификата.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *