Чем правильно ставить отступы — табами или пробелами?

Чем правильно ставить отступы — табами или пробелами?

Чем нравится — то и ставьте

Программисты почти 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 пробела — ставьте пробелы, даже если ваш таб настроен на такой же размер. А если все ставят табы — ставьте и вы.

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Виталий Вебер

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Что такое абсолютный и относительный путь к файлу
Что такое абсолютный и относительный путь к файлу

И когда нужен каждый из них

easy
Кодирование и шифрование — в чём разница?
Кодирование и шифрование — в чём разница?

Одно делается для удобства, а другое — для защиты.

easy
Что такое Design first и Code first
Что такое Design first и Code first

Это когда программисты делают то, что скажут дизайнеры, или наоборот.

easy
Как прокачать буфер обмена
Как прокачать буфер обмена

И что это вообще такое

easy
Как правильно писать адрес: с www или без?
Как правильно писать адрес: с www или без?

Как нравится — так и пишите

easy
Что такое исключения в программировании
Что такое исключения в программировании

Рассказ об ошибках, которые можно предусмотреть заранее.

easy
Что такое технический долг
Что такое технический долг

Фраза из лексикона сильных профессионалов

easy
Дизайнер в ИТ: зачем он нужен и как им стать
Дизайнер в ИТ: зачем он нужен и как им стать

Нестыдные вопросы, в том числе — нужно ли уметь рисовать.

easy
Что такое демоны и службы в программировании
Что такое демоны и службы в программировании

Это маленькие программы, которые работают в фоновом режиме

easy
Зачем нужна точка с запятой в программировании
Зачем нужна точка с запятой в программировании

И всегда ли она нужна?

easy
easy