Почему отступ в пустых строках плох? - PullRequest
35 голосов
/ 07 мая 2011

Каждый известный мне FOSS-проект имеет правила, запрещающие использование пробелов в коде. Но я думаю, что вполне естественно продолжить текущий отступ на следующей строке:

int main()
{
....int a = 42;
....
....return a;
}

Но Git, например, все равно выдает предупреждения. Итак, мой вопрос: почему эти вкладки внутри текущий отступ плохой?

Я не ищу ответы типа "Это всегда так". Давайте предположим, что отступ выполняется последовательно во всем рассматриваемом проекте.

Ответы [ 3 ]

47 голосов
/ 07 мая 2011

Вероятно, потому, что объединить патчи с бесполезными пробелами сложнее, чем должно быть.

diff(1) и patch(1) рассматривают пробелы и табуляции как важный контент. (Спросите любой Makefile или .py исходный файл - они важны !) И если ваша"пустая строка" содержит четыре пробела и my"пустая строка" содержит восемь пробелов, любая попытка поделиться патчами между нами потерпит неудачу по очень тривиальным причинам.

Конечно, если вы измените отступ блока кода оптом, вам придется пойти на какую-то работу, чтобы сделать патчи в любом случае . Но попытка отследить ошибки слияния в строках, которые выглядят пустыми, болезненна . (Я потратил слишком много своей жизни на это. Да, vim listchars может помочь, но чтение кода с listchars все время также раздражает.)

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

4 голосов
/ 07 мая 2011

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

3 голосов
/ 07 мая 2011

Я думаю, что все сводится к тому, что «в вашем коде нет лишних скрытых байтов-сюрпризов».

Как указывает @sarnold, избыточные неожиданные байты вносят исправления и бесполезно вносят различия.

...