Программисты почти 30 лет спорят, как ставить отступы: табуляцией или пробелами. Разбираемся, зачем это вообще нужно и как это делать правильно.
Зачем нужны отступы
С помощью отступов программисты форматируют код, чтобы он лучше выглядел и его было удобнее читать другим программистам. С ним легко показать вложенность элементов — что к чему относится и как всё связано между собой. Например, вот так выглядит неформатированный HTML-файл из статьи про контекстное меню:
Технически здесь всё правильно, и браузер нарисует страницу без ошибок, но разбираться в таком коде сложно. Если мы захотим поменять одни элементы на другие, то с ходу будет непонятно, что к чему относится и где надо заменить.
А вот так выглядит тот же самый код, к которому мы добавили отступы разного уровня — сразу видна иерархия и порядок:
Ещё есть языки программирования, в которых отступы обязательны — сейчас это Python, а ещё были Fortran и COBOL. Например, эти два фрагмента кода на Python приведут к разным результатам, хотя отличаются только отступами:
# с отступами
for i in range(10):
i = i+1
print(i)
k = i*2
print(k)
# без отступов
for i in range(10):
i = i+1
print(i)
k = i*2
print(k)
Что такое табы
Таб — это сокращённое название табуляции. Табуляция появилась в пишущих машинках, чтобы было удобнее печатать таблицы — при нажатии этой клавиши каретка сдвигалась на следующие 8 символов вправо. Это позволяло создавать ровные колонки таблиц и не считать отступы вручную.
Клавиша табуляции перешла на клавиатуру компьютера и в редакторах кода делает то же самое — перемещает курсор на несколько позиций правее.
На сколько именно позиций сдвигается курсор — зависит от настроек редактора. Чаще всего используются числа, кратные двум: 2, 4 или 8 позиций. Одна позиция равна одному пробелу, поэтому говорят, например, что в табе 8 пробелов.
Почему лучше табы
С табами всё просто: один таб — один отступ, первый уровень вложенности. Два таба — два отступа, второй уровень вложенности и так далее. Не нужно много раз нажимать на пробел, считать в уме, сколько раз ты уже нажал и сколько осталось.
А ещё всегда можно настроить размер табуляции — сколько пробелов будет занимать один таб. В редакторе кода VS Code это можно настроить внизу, на информационной панели:
Почему лучше пробелы
С пробелами всё просто — ставишь, сколько нужно, и код выглядит одинаково в любом редакторе, независимо от настроек. Если скопировать код с пробелами и вставить в свой проект, то он вставится точно так же, как в оригинале. А если бы там были табы, то их пришлось бы подгонять под размер пробельных отступов и тратить на это дополнительное время.
Какие бывают стили отступов
У разных программистов есть свои традиции отступов и форматирования кода. Вот самые известные из них.
Стиль Кернигана и Ритчи. Автора языка Си придерживались такого форматирования: отступ в 8 пробелов (или одна большая табуляция, открывающая скобка на открывающей строке, закрывающая — отдельно:
if (условие) {
········оператор
}
Стиль GNU. В большинстве проектов Linux и открытого ПО придерживаются отступов в 2 символа, причём скобки тоже отступаются:
if (условие)
··{
····оператор
··}
Стиль Олмана, или стиль BSD. У этого подхода открывающая скобка находится на том же уровне, что и команда, к которой она относится, а операторы сдвинуты на определённое количество символов (2, 4 или 8). Отступ может быть любым, главное, чтобы он соблюдался во всей программе:
if (условие)
{
····оператор
}
Так что правильно ставить — табы или пробелы?
Если вы пишете код один и для себя — ставьте, что нравится, это же ваш код.
Если вы работаете в команде или занимаетесь парным программированием — узнайте, как принято, и делайте так же. Например, если в компании принято ставить 4 пробела — ставьте пробелы, даже если ваш таб настроен на такой же размер. А если все ставят табы — ставьте и вы.