Что такое табуляция в программировании
Перейти к содержимому

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

  • автор:

Табуляция Что такое табуляция и зачем она?

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

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

один→два→три→четыре
1→2→3→4
5→6→7→8
9→10→11→12
получим такую распечатку:

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

Содержание [убрать]
1 В текстовых редакторах
2 В текстовых процессорах
3 Табуляция в (X)HTML
4 Клавиша Tab ⇆ в прикладном ПО
5 См. также
В текстовых редакторах [править | править вики-текст]
В текстовых редакторах позиции табуляции могут идти каждые 2 или 4 знакоместа: это удобно для работы с языками программирования. По желанию пользователя клавиша Tab ⇆ может не вставлять символ-табулятор, а имитировать его, вставляя нужное количество пробелов.

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

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

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

Табуляция в (X)HTML[править | править вики-текст]
В (X)HTML горизонтальная табуляция обозначается как, однако она отобразится браузером только будучи использованной внутри тегов и :

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

Две строчки с табуляцией:
2007Табуляция внутри строки.
Табуляция в начале строки.

Строка без табуляции.

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

Две строчки с табуляцией:
2007Табуляция внутри строки.
Табуляция в начале строки.

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

Клавиша Tab ⇆ в прикладном ПО [править | править вики-текст]
За клавишей Tab ⇆ закрепились такие функции:

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

Question book-4.svg
В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете отредактировать эту статью, доб

Остальные ответы

Клавиша TAB делает отступ. Удобно для набора теста, например, столбиками
Например, название товара и его цена

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

Табуляция в более широком смысле — создание таблиц. Например таблиц тригонометрических функций. Ранее были широко распространены.

Этот термин можно нормально объяснить только в конкретном контексте. Что именно надо табулировать?

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

Любители пробелов оказались богаче сторонников табуляции

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

Исследование: опенсорс в России.

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

Проблема разных отступов существует достаточно давно и часто является причиной безрезультатных споров в профессиональной среде. Фактически, вопрос «пробелы или табуляция» представляет собой образцовый холивар, в котором у обеих сторон есть свои аргументы(1, 2), но никто не намерен переходить на другую сторону.

Дэвид Робинсон воспользовался данными опроса разработчиков за 2017 год, проведенного Stack Overflow. Из 28657 разработчиков, обозначивших себя профессиональными программистами, 40,7 процента используют табуляцию, а 41,8 процента форматируют код пробелами (оставшиеся 17,5 процентов заявили, что используют оба метода форматирования).

Из опрошенных 12426 предоставили данные о годовой зарплате, что позволило Дэвиду Робинсону после пересчета локальных валют в доллары США сопоставить данные о доходах с предпочитаемой техникой форматирования кода. Оказалось, что любители пробелом в среднем получают больше, чем сторонники табуляции, хотя с увеличением стажа разрыв между зарплатами несколько сокращается. Программисты, использующие оба метода форматирования, в среднем зарабатывают столько же, сколько и разработчики, пользующиеся табуляцией.

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

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

Ранее разработчик из Google Фелипе Хоффа по итогам анализа более миллиарда файлов из 400 тысяч репозиториев на GitHub выяснил, что форматирование кода с помощью пробелов в общем случае используется чаще, чем форматирование с помощью табуляции. Холивар «пробелы или табуляция» также нашел отражение в современной культуре — например, одна из сцен в сериале «Кремниевая долина» строится именно вокруг этого «извечного вопроса» программирования.

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

единорог и табуляции

Многие могут счесть спор, о том, что лучше пробелы или табуляции в коде за holy wars. Однако нет, я не хочу устраивать дискуссию на эту тему. Я однозначно утверждаю, что в обязательном порядке следует использовать пробелы. И разговор и «предпочтении того или иного» здесь не уместен. Как не уместно в наше время обсуждать, что удобнее, компьютер или печатная машинка. Поскольку печатные машинки закончили свое существование, ориентироваться в дальнейшем на их использование, по меньшей мере, нерационально. А если ещё учесть, сколь удобнее пользоваться компьютером для набора текста, то вопрос выбора просто отпадает.

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

Эту заметку меня побудило написать то, что табуляции мне надоели. Вроде и мелочь. Но идут годы, а эта инфекция у программистов всё никак не проходит. Хотя сам я при написании кода не использую табуляции, тем не менее, регулярно вспоминаю недобрым словом их поклонников. Не волнуйтесь, от этого сон и аппетит у меня не нарушается, но некоторое время впустую я трачу. А если учесть, сколько еще людей сталкивается с аналогичными досадными моментами, то суммарный вред весьма ощутимый. И если от спама выгоду получают хотя бы спамеры, то от использования табов выгоды не получает никто. Энергия уходит в никуда. Этот как капающий кран. Одна капля, которую тратит программист, не существенна. Но в сумме уже столько утекло и продолжает утекать, ужас. Предлагаю дочитать эту статью и, наконец, прекратить эту утечку!

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

1) Объем файлов с исходным кодом меньше.

2) Замена всех пробелов может привести к потере истории правок. Нельзя будет сравнить старое и новое.

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

Займемся критикой чистого разума.

1) Объем файлов с исходным кодом меньше

Насколько это верный, настолько же и глупый аргумент. В наше время экономить на килобайтах просто бессмысленно. Данный аргумент потерял всякий смысл более 10 лет назад.

2) Замена всех пробелов может привести к потере истории правок. Нельзя будет сравнить старое и новое.

Формально тоже всё верно. Но, пожалуй, это слишком мрачная картина. Так ли уж часто вам приходится исследовать историю файла на большую глубину? Обычно никто не заглядывает в историю глубже одной-двух ревизий файла. Замена табуляции на пробелы делается глобально и один раз и не должна мешать дальнейшим сравнениям.

Если надо часто и глубоко по времени сравнивать файлы, то это что-то в консерватории не то. И тут уже не до пробелов/табуляций. А если нормальному программисту в нормальном проекте все-таки раз в год придется историю одного файла до 10-ого колена изучать, то ему тот же WinMerge поможет. Он умеет замену табуляций на пробел за отличие не считать. Думаю и другие системы сравнения не хуже.

В общем, тоже не аргумент. А если и аргумент, то уж очень слабенький.

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

Никогда не работает на практике.

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

Сделаю небольшое отступление. На самом деле в утверждении зерно смысла есть. Вот только выдранное из контекста, оно бестолково. Подобное может работать только тогда, где код выравнивается ТОЛЬКО табуляцией. Пробелы для выравнивания НЕ ИСПОЛЬЗУЮТСЯ ВООБЩЕ. В этом случае да, меня размер табуляции, мы можем менять отображения кода. Например, одному нравится смотреть на такой код (один таб = 2 пробела):

if(A==B) x = y;

Другой использует другой размер и любуется на этот же код в своем любимом стиле (один таб = 4 пробела):

if(A==B) x = y;

Вот только никто так не делает. Походите по своему коду и вы увидете что-то более реалистичное (один таб = 2 пробела):

A=Aaaaaaaaaaaa && Bbbbbbbbb;

Если теперь таб станет равен не двум пробелам, то вся красота оформления моментально нарушится.

A=Aaaaaaaaaaaa && Bbbbbbbbb;

Или вот, я взял и смотрю чей-то файл. Кто-то старался, выравнивал:

wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = WS_OVERLAPPED ; wcex.lpfnWndProc = (WNDPROC)ClipBoardWndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = theApp.m_hInstance; wcex.hIcon = 0; wcex.hCursor = ::LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

Вот только у меня, в FAR с другим размером табуляции это вот так смотрится:

wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = WS_OVERLAPPED ; wcex.lpfnWndProc = (WNDPROC)ClipBoardWndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = theApp.m_hInstance; wcex.hIcon = 0; wcex.hCursor = ::LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);

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

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

В результате получаем, что использование табуляции из абстракнтых соображений не имеет смысла. Я утверждаю, что взяв свой или чужой код и изменив размер табуляции, в 99% случаев мы получим некрасивый, разъехавшийся код. А раз так, то и аргумент в защиту справедлив только на 1%, а то и меньше. Ни разу не видел, чтоб с другими табуляциями код смотрелся хорошо. А уж кода я смотрю много.

С доводами в защиту табуляции я закончил. Теперь перечислю недостатки от их использования.

1) Тяжело работать с проектами, где используются библиотеки, содержащие в тексте табуляции. Предположим, в одной библиотеке табуляция равна 3 символам, в другой 4 символам. А вы в проекте используете 2 символа. В результате какая-то часть кода у вас будет отображаться в редакторе со сбитым форматированием.

Ну и где польза от переменного размера табуляции? Какой размер не выбери, где-то да криво будет. Если же везде будут пробелы, то и смотреться все красиво будет. Да, будут разные отступы, но форматирование то красивое везде останется!

2) Легко пустить козла в огород. Скажем у вас табуляция равна 4 пробелам. Кто-то что-то чуть-чуть поправил, используя другой размер табуляции или явно вставив пробелы. У него все смотрелось нормально, а у вас строчка кода куда-то уедет.

3) Надо постоянно настраивать различные редакторы под нужный вам размер табуляции. Даже если вам нужно просто посмотреть код не правя. Иначе все разъезжается. Особенно это не удобно, когда приходится что-то делать со своим кодом на сторонней машине. Или наоборот заглядывать в чужой код. Тут объяснить всю суетность сложно. Это надо прочувствовать. Программисты, пожалуй делятся на тех, кто знает и понимает про это неудобство, и кто нет. Но прошу, те, кто не понимает, поверьте — эти неудобства есть! И если вам, в общем-то, всё равно, то используйте пробелы! Сэкономите кому то немного сил и времени.

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

Ну и на последок отвечу на: «мы так всегда писали, значит и дальше так стоит продолжать». Часто, причем, это подкрепляется каким-либо бородатым стандартом кодирования, используемым программистами. Слава богу, профессиональные разработчики не стоят на месте. И не боятся нарушить старинные устои. Примером тому может служить Google C++ Style Guide. Вот цитата оттуда по поводу пробелов и табуляций.

Spaces vs. Tabs

Use only spaces, and indent 2 spaces at a time.

We use spaces for indentation. Do not use tabs in your code. You should set your editor to emit spaces when you hit the tab key.

Слава богу! Хоть у кого-то разумный подход!

Желаю и вам свежести в ваших стандартах кодирования!

ПРИМЕЧАНИЕ ДЛЯ ТЕХ, КТО В ТАНКЕ

Чтобы использовать для оформления пробелы, вовсе не обязательно 4 или более раз нажимать клавишу пробел. Во всех редакторах есть возможность настроить, сколько пробелов вставлять при нажатии таба.

Никогда бы не подумал, что из-за этого меня заминусуют. «Вот ведь гад! Рекомендует пробелы нажимать до посинения, вместо милого таба!»

  • табуляция
  • программирование
  • исходный код
  • пробелы
  • форматирование кода
  • оформление кода
  • стандарты кодирования

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

Одна из главных тем споров среди программистов — как отбивать отступы строк при написании кода. Во многих языках программирования отступы нужны просто «для красоты», чтобы людям было проще читать код. Но в некоторых — например, Python, — отступы обязательны, они помогают компилятору понять, где начинаются и заканчиваются блоки команд.

Одни разработчики делают отступы пробелами, а другие — табуляцией (обычно этот символ ставится клавишей TAB). Вот пример кода на Python, написанного с использованием пробелов (один шаг отступа — четыре пробела):

Форум для программистов Stack Overflow решил выяснить, сколько зарабатывают представители каждого из течений. В опросе участвовало более 28 тысяч человек.

40,7 процента опрошенных сказали, что используют табуляцию, а 41,8 процента — пробелы. Остальные пользуются и тем, и другим. При этом медианное значение зарплат у первых — 43750 долларов, а у вторых — 59140.

Причина различий неясна: автор исследования Дэвид Робинсон сначала предположил, что поклонники табуляции живут в менее богатых странах, но дальнейший анализ данных опроверг эту теорию — соотношение между зарплатами более-менее сохраняется в разных государствах. Робинсон пришел к выводу, что в среднем использование пробелов в коде вместо табуляции увеличивает зарплату на 8,6 процента.

Разница в зарплате программистов, использующих разные способы создавать отступы, в зависимости от опыта работы

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

Читайте также

  • Телеграм
  • Фейсбук
  • Твиттер

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

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